Tengo una Lista que tiene duplicados de objetos. Para resolver eso, necesito convertir la Lista en un HashSet (en C#). ¿Alguien sabe cómo?
Asegúrese de que la clase de su objeto anule Equals y GetHashCode y luego puede pasar List<T> al constructor HashSet<T> .
var hashSet = new HashSet<YourType>(yourList);Puede ver: ¿Cuál es el mejor algoritmo para un System.Object.GetHashCode anulado?
Una forma alternativa sería
var yourlist = new List<SomeClass>(); // [...] var uniqueObjs = yourlist.Distinct(); //Gives you a List with unique Objects of the List. Tenga en cuenta que esto solo es posible si SomeClass anula GetHashCode y Equals de alguna manera. Esto también es cierto para
var uniqueObjs = new HashSet<SomeType>(yourOriginalList); De lo contrario, podría implementar su propia clase IEqualityComnparer y pasarla a distinto.
Tenga en cuenta que con el enfoque Distinct() , también puede buscar distintos valores de propiedad del objeto en la lista:
var uniqueNames = yourlist.Select(obj => obj.Name).Distinct();y algo más...
Si su tipo implementa IEquatable<T> , Equals() y GetHashCode() correctamente, entonces no necesita realizar la desduplicación usted mismo. Puede usar Distinct() de Linq para hacerlo así:
myList = myList.Distinct().ToList();