#c#
#c#
Вопрос:
Кому-нибудь приходилось назначать список ISet
? Как мне это сделать?
Допустим, у меня есть класс
class Foo
{
ISet<Item> Items { get; set; }
}
Теперь я хочу сделать следующее:
var foo = new Foo() { Items = new List<Item>() { new Item() } }
Ответ №1:
List<Item> myList = ...
foo.Items = new HashSet<Item>( myList );
Имейте в виду, что a Set
, в отличие от a List
, должен содержать каждый элемент ровно один раз. Следовательно, если myList
содержит несколько копий некоторых элементов, все эти копии, кроме одной, не попадут в набор.
Равенство элементов (для обнаружения нескольких копий) определяется методами Equals
и GetHashCode
. Если вы хотите использовать другое определение равенства, вы можете использовать перегрузку HashSet
конструктора, которая принимает IEqualityComparer<Item>
.
Ответ №2:
List<T>
не реализует ISet<T>
интерфейс… Итак, это невозможно.
Единственными классами, которые реализуют, ISet<T>
являются HashSet<T>
и SortedSet<T>
.
Самым близким, что вы могли бы получить, было бы (если вы удалите ненужный List
объект между ними):
var foo = new Foo { Items = new HashSet<Item> { new Item() } };