将通用列表转换为ISet

时间:2011-04-27 17:44:12

标签: c#

是否有人必须为ISet分配一个列表?我该如何去做呢?

说我有班级

class Foo
{
  ISet<Item> Items { get; set; }
}

现在,我想做以下事情:

var foo = new Foo() { Items = new List<Item>() { new Item() } }

2 个答案:

答案 0 :(得分:33)

List<Item> myList = ...
foo.Items = new HashSet<Item>( myList );

请注意,与Set不同,List必须包含每个元素一次。因此,如果myList包含某些元素的多个副本,则除了一个副本之外的所有副本都不会进入该集合。

元素的等同性(用于检测多个副本)由EqualsGetHashCode方法定义。如果您想使用不同的相等定义,则可以使用HashSet的{​​{1}}构造函数的重载。

答案 1 :(得分:6)

List<T>没有实现ISet<T>接口......所以,这是不可能的。

实施ISet<T>的唯一类别是HashSet<T>SortedSet<T>

你能得到的最接近的是(如果你在中间删除了不必要的List个对象):

var foo = new Foo { Items = new HashSet<Item> { new Item() } };