如何转换列表<;T>;到HashSet<;T>;在C#中?

如何转换列表<;T>;到HashSet<;T>;在C#中?,c#,list,hashset,C#,List,Hashset,我有一个包含重复对象的列表。为了解决这个问题,我需要将列表转换为哈希集(在C#中)。有人知道怎么做吗?确保对象的类重写等于和GetHashCode,然后您可以将列表传递给HashSet var hashSet=newhashset(yourList); 您可能会看到:另一种方法是 var yourlist = new List<SomeClass>(); // [...] var uniqueObjs = yourlist.Distinct(); //Gives you a

我有一个包含重复对象的列表。为了解决这个问题,我需要将列表转换为哈希集(在C#中)。有人知道怎么做吗?

确保对象的类重写
等于
GetHashCode
,然后您可以将
列表传递给
HashSet

var hashSet=newhashset(yourList);

您可能会看到:

另一种方法是

var yourlist = new List<SomeClass>();

// [...]

var uniqueObjs = yourlist.Distinct();  //Gives you a List with unique Objects of the List.
否则,您可以实现自己的
IEqualityComnparer
-类并将其传递给distinct

请注意,使用
Distinct()
方法,还可以在列表中查找对象的不同属性值:

var uniqueNames = yourlist.Select(obj => obj.Name).Distinct(); 

还有更多…

如果您的类型正确地实现了
IEquatable
Equals()
GetHashCode()
,那么您就不需要自己执行重复数据消除。您可以使用Linq的
Distinct()
这样做:

myList = myList.Distinct().ToList();

这是一个列表,而不是数组。对于这类问题,它们都是
IList
。答案解决了这个问题-“HashSet有一个构造函数,它接受一个IEnumerable”。与回答特定问题的答案相比,我更喜欢这个答案。“我想要一个有两扇门的房子,所以我打算用一扇门推平这座房子,然后从头开始建造一座新房子。”你需要在“SomeClass”上实现IEquatable才能做到这一点work@YTAM对我来说,,如果你想在原始列表的基础上创建一个新的Hashset,情况也是如此。仅仅因为它们被认为是重复的,这就意味着它们在某种程度上必须在数学/逻辑上相等。大多数时候,我需要一个集合来从列表中删除重复项。这是一个很好的实现方法;IE:somelist.Distinct();
var uniqueNames = yourlist.Select(obj => obj.Name).Distinct(); 
myList = myList.Distinct().ToList();