Я посмотрел это в сети, но я прошу об этом, чтобы я не пропустил что-то. Есть ли встроенная функция для преобразования HashSets в списки в С#? Мне нужно избегать двуличности элементов, но мне нужно вернуть список.
Преобразование С# Hashset в списки
Ответ 1
Вот как бы я это сделал:
using System.Linq;
HashSet<int> hset = new HashSet<int>();
hset.Add(10);
List<int> hList= hset.ToList();
HashSet по определению не содержит дубликатов. Поэтому нет необходимости в Distinct
.
Ответ 2
Два эквивалентных варианта:
HashSet<string> stringSet = new HashSet<string> { "a", "b", "c" };
// LINQ ToList extension method
List<string> stringList1 = stringSet.ToList();
// Or just a constructor
List<string> stringList2 = new List<string>(stringSet);
Лично я бы предпочел позвонить ToList
, это означает, что вам не нужно обновлять тип списка.
Вопреки моим предыдущим мыслям, оба пути позволяют легко выразить ковариацию в С# 4:
HashSet<Banana> bananas = new HashSet<Banana>();
List<Fruit> fruit1 = bananas.ToList<Fruit>();
List<Fruit> fruit2 = new List<Fruit>(bananas);
Ответ 3
Существует метод расширения Linq ToList<T>()
, который это сделает (он определен в IEnumerable<T>
, который реализуется HashSet<T>
).
Просто убедитесь, что вы using System.Linq;
Как вы, очевидно, знаете, что HashSet
гарантирует, что у вас нет дубликатов, и эта функция позволит вам вернуть его как IList<T>
.
Ответ 4
List<ListItemType> = new List<ListItemType>(hashSetCollection);