是否有人必须为ISet
分配一个列表?我该如何去做呢?
说我有班级
class Foo
{
ISet<Item> Items { get; set; }
}
现在,我想做以下事情:
var foo = new Foo() { Items = new List<Item>() { new Item() } }
答案 0 :(得分:33)
List<Item> myList = ...
foo.Items = new HashSet<Item>( myList );
请注意,与Set
不同,List
必须包含每个元素一次。因此,如果myList
包含某些元素的多个副本,则除了一个副本之外的所有副本都不会进入该集合。
元素的等同性(用于检测多个副本)由Equals
和GetHashCode
方法定义。如果您想使用不同的相等定义,则可以使用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() } };