web-dev-qa-db-ja.com

リストへのHashSet変換

私はこれをネットで調べましたが、何かを見逃していないことを確認するためにこれを求めています。 C#でHashSetをリストに変換する組み込み関数はありますか?要素の重複を避ける必要がありますが、リストを返す必要があります。

25
atlantis

ここに私がそれをする方法があります:

   using System.Linq;
   HashSet<int> hset = new HashSet<int>();
   hset.Add(10);
   List<int> hList= hset.ToList();

HashSetは、定義上、重複を含みません。したがって、Distinctは必要ありません。

64
Graviton

2つの同等のオプション:

HashSet<string> stringSet = new HashSet<string> { "a", "b", "c" };
// LINQ's ToList extension method
List<string> stringList1 = stringSet.ToList();
// Or just a constructor
List<string> stringList2 = new List<string>(stringSet);

個人的には、ToListを呼び出すことをお勧めします。これは、リストのタイプを再指定する必要がないことを意味します。

以前の考えとは逆に、どちらの方法でもC#4で共分散を簡単に表現できます。

    HashSet<Banana> bananas = new HashSet<Banana>();        
    List<Fruit> fruit1 = bananas.ToList<Fruit>();
    List<Fruit> fruit2 = new List<Fruit>(bananas);
14
Jon Skeet

それを行うLinq拡張メソッドToList<T>()があります(これはIEnumerable<T>によって実装されるHashSet<T>で定義されています)。

あなたがusing System.Linq;であることを確認してください

あなたが明らかに知っているように、HashSetは重複がないことを保証し、この関数はそれをIList<T>として返すことができます。

6
Simon Fox
List<ListItemType> = new List<ListItemType>(hashSetCollection);
5
user3083619