HashSet.Union
vs HashSet.Unionwith
2つのハッシュセットを結合する場合。
私はこのように結合しようとしています:
HashSet<EngineType> enginesSupportAll = _filePolicyEvaluation.EnginesSupportAll;
enginesSupportAll = enginesSupportAll != null ? new HashSet<EngineType>(engines.Union(enginesSupportAll)) : enginesSupportAll;
この例に最適な方法とその理由は何ですか?
まあ、それはHashSet.Union
ではなく Enumerable.Union
なので、あらゆる種類のIEnumerable<>
で動作するLINQ拡張メソッドを使用していますが、 HashSet.UnionWith
は、現在のインスタンスを変更する実際のHashSet
メソッドです。
Union
はIEnumerable<TSource>
を返しますUnionWith
はvoid
で、現在のHashSet
インスタンスを変更しますUnionWith
は最適化できるのでわずかに効率的ですメソッドでどのような種類のシーケンスもサポートしたくない場合は、HashSet
を修正し、修正できます。それ以外の場合はLINQ拡張機能を使用します。この目的のためだけにHashSet
インスタンスを作成する場合、それは実際には重要ではなく、LINQがより柔軟で、クエリをチェーンできるようにしたいと思います。