これを行うものは何も組み込まれていないと思いますが、拡張メソッドを書くのは本当に簡単です。
public static class Extensions
{
public static HashSet<T> ToHashSet<T>(
this IEnumerable<T> source,
IEqualityComparer<T> comparer = null)
{
return new HashSet<T>(source, comparer);
}
}
ここでは拡張メソッド(または少なくとも何らかの形式のジェネリックメソッド)が本当に必要なことに注意してください。タイプをT
明示的に表現できない場合があるからです。
var query = from i in Enumerable.Range(0, 10)
select new { i, j = i + 1 };
var resultSet = query.ToHashSet();
HashSet<T>
コンストラクタを明示的に呼び出すことでそれを行うことはできません。ジェネリックメソッドが型推論を行うのは、型推論に依存しています。
今、あなたは可能性があり、それ命名することを選択したToSet
とリターンをISet<T>
-しかし、私はに固執したいToHashSet
とコンクリートタイプ。これは、標準のLINQ演算子(ToDictionary
、ToList
)と一貫性があり、将来の拡張(例ToSortedSet
)を可能にします。使用する比較を指定するオーバーロードを提供することもできます。
HashedSet
-part は省略すべきだと思います。それはちょうどので、混乱しているC#
とLINQ
呼ばれるものを持っていませんHashedSet
。