web-dev-qa-db-ja.com

HashSetのUnion vs Unionwith

HashSet.Union vs HashSet.Unionwith 2つのハッシュセットを結合する場合。

私はこのように結合しようとしています:

HashSet<EngineType> enginesSupportAll = _filePolicyEvaluation.EnginesSupportAll;
        enginesSupportAll = enginesSupportAll != null ? new HashSet<EngineType>(engines.Union(enginesSupportAll)) : enginesSupportAll;

この例に最適な方法とその理由は何ですか?

12
Max.Futerman

まあ、それはHashSet.Unionではなく Enumerable.Union なので、あらゆる種類のIEnumerable<>で動作するLINQ拡張メソッドを使用していますが、 HashSet.UnionWith は、現在のインスタンスを変更する実際のHashSetメソッドです。

  • UnionIEnumerable<TSource>を返します
  • UnionWithvoidで、現在のHashSetインスタンスを変更します
  • 多分UnionWithは最適化できるのでわずかに効率的です

メソッドでどのような種類のシーケンスもサポートしたくない場合は、HashSetを修正し、修正できます。それ以外の場合はLINQ拡張機能を使用します。この目的のためだけにHashSetインスタンスを作成する場合、それは実際には重要ではなく、LINQがより柔軟で、クエリをチェーンできるようにしたいと思います。

14
Tim Schmelter