J'ai une liste contenant des doublons d'objets. Pour résoudre cela, je dois convertir la liste en un HashSet (en C #). Est-ce que quelqu'un sait comment?
Assurez-vous que la classe de votre objet remplace Equals
et GetHashCode
, puis vous pouvez passer le List<T>
à HashSet<T>
constructeur .
var hashSet = new HashSet<YourType>(yourList);
Vous pouvez voir: Quel est le meilleur algorithme pour un System.Object.GetHashCode substitué?
Une autre solution serait
var yourlist = new List<SomeClass>();
// [...]
var uniqueObjs = yourlist.Distinct(); //Gives you a List with unique Objects of the List.
Notez que cela n'est possible que si SomeClass
remplace GetHashCode
et Equals
d'une manière ou d'une autre. Cela vaut également pour
var uniqueObjs = new HashSet<SomeType>(yourOriginalList);
Sinon, vous pourriez implémenter votre propre classe IEqualityComnparer
- et la transmettre à distinct.
Notez qu'avec l'approche Distinct()
, vous pouvez également rechercher des valeurs de propriété distinctes de l'objet dans la liste:
var uniqueNames = yourlist.Select(obj => obj.Name).Distinct();
et encore plus ...
Si votre type implémente IEquatable<T>
, Equals()
et GetHashCode()
correctement, vous n'avez pas besoin de faire la déduplication vous-même. Vous pouvez utiliser la Distinct()
de Linq pour le faire comme ceci:
myList = myList.Distinct().ToList();