HashSetクラス・SortedSetクラスには包含関係の検証を行うメソッドとして次のメソッドが用意されています。 いずれも引数としてIEnumerable<T>を取り、戻り値は真偽値(boolean)です。 なお、要素の並びが異なっていても包含関係には影響しません。 これらのメソッドでは順序にかかわらずどのような要素が含まれているかどうかのみが検証されます。

包含関係の検証を行うメソッド
メソッド 動作
HashSet.SetEquals
SortedSet.SetEquals
現在の集合と引数で指定されたIEnumerable<T>が等しいかどうか調べる
(現在の集合と引数の集合がすべて同じ要素で構成されている場合はtrue)
HashSet.Overlaps
SortedSet.Overlaps
現在の集合と引数で指定されたIEnumerable<T>が共通する要素を持つかどうか調べる
(現在の集合と引数の集合が一つでも同じ要素を持つ場合はtrue)
HashSet.IsSubsetOf
SortedSet.IsSubsetOf
現在の集合が引数で指定されたIEnumerable<T>の部分集合かどうか調べる
(現在の集合が引数の集合に含まれる場合はtrue)
HashSet.IsProperSubsetOf
SortedSet.IsProperSubsetOf
現在の集合が引数で指定されたIEnumerable<T>の真部分集合かどうか調べる
(現在の集合が引数の集合に含まれ、かつ両者が等しくない場合はtrue)
HashSet.IsSupersetOf
SortedSet.IsSupersetOf
現在の集合が引数で指定されたIEnumerable<T>の上位集合かどうか調べる
(現在の集合が引数の集合を含む場合はtrue)
HashSet.IsProperSupersetOf
SortedSet.IsProperSupersetOf
現在の集合が引数で指定されたIEnumerable<T>の真上位集合かどうか調べる
(現在の集合が引数の集合を含み、かつ両者が等しくない場合はtrue)

以下は、上記のメソッドを使った例です。 SortedSetでは並べ替えが行われる以外は、結果は同じです。

IsSubsetOf・IsProperSubsetOfメソッドを使ってHashSetが別の集合の部分集合か・真部分集合かどうか調べる
using System;
using System.Collections.Generic;

class Sample {
  static void Main()
  {
    var s = new HashSet<int>() {3, 4, 1, 5, 2};

    Console.WriteLine("Set: {{{0}}}", string.Join(", ", s));
    Console.WriteLine();

    // HashSetが引数の集合の部分集合かどうか調べる (IsSubsetOf)
    Console.WriteLine(
      "IsSubsetOf       {{0, 1, 2, 3, 4, 5, 6}}: {0}",
      s.IsSubsetOf(new[] {0, 1, 2, 3, 4, 5, 6})
    );
    // HashSetが引数の集合の真部分集合かどうか調べる (IsProperSubsetOf)
    Console.WriteLine(
      "IsProperSubsetOf {{0, 1, 2, 3, 4, 5, 6}}: {0}",
      s.IsProperSubsetOf(new[] {0, 1, 2, 3, 4, 5, 6})
    );

    Console.WriteLine(
      "IsSubsetOf       {{1, 2, 3, 4, 5}}: {0}",
      s.IsSubsetOf(new[] {1, 2, 3, 4, 5})
    );
    Console.WriteLine(
      "IsProperSubsetOf {{1, 2, 3, 4, 5}}: {0}",
      s.IsProperSubsetOf(new[] {1, 2, 3, 4, 5})
    );
  }
}
実行結果
Set: {3, 4, 1, 5, 2}

IsSubsetOf       {0, 1, 2, 3, 4, 5, 6}: True
IsProperSubsetOf {0, 1, 2, 3, 4, 5, 6}: True
IsSubsetOf       {1, 2, 3, 4, 5}: True
IsProperSubsetOf {1, 2, 3, 4, 5}: False