有人需要将列表分配给ISet
吗?我该如何做到这一点?
比方说,我有这个类:
class Foo
{
ISet<Item> Items { get; set; }
}
现在,我想要做以下事情:
var foo = new Foo() { Items = new List<Item>() { new Item() } }
有人需要将列表分配给ISet
吗?我该如何做到这一点?
比方说,我有这个类:
class Foo
{
ISet<Item> Items { get; set; }
}
现在,我想要做以下事情:
var foo = new Foo() { Items = new List<Item>() { new Item() } }
List<Item> myList = ...
foo.Items = new HashSet<Item>( myList );
记住,Set
与List
不同,必须只包含每个元素一次。因此,如果myList
包含某些元素的多个副本,则除一个之外,所有这些副本都不会进入集合。
元素的相等性(用于检测多个副本)由Equals
和GetHashCode
方法定义。如果您想要使用不同的相等性定义,可以使用接受IEqualityComparer<Item>
的HashSet
构造函数的重载。
List<T>
没有实现 ISet<T>
接口,所以这是不可能的。ISet<T>
的类是 HashSet<T>
和 SortedSet<T>
。List
对象,最接近的方法是:var foo = new Foo { Items = new HashSet<Item> { new Item() } };