HashSet・SortedSetに特定の要素が含まれているかどうかを調べるにはContainsメソッドを使うことができます。 このほかに、.NET Standard 2.1/.NET Framework 4.7.2/.NET Core 2.0以降では、TryGetValueメソッドを使うこともできます。
TryGetValueメソッドでは、HashSet・SortedSetに指定した値の要素があるかどうかを調べ、ある場合はその値を取得することができます。
using System;
using System.Collections.Generic;
class Sample {
static void Main()
{
var s = new SortedSet<int>() {3, 1, 6, 4, 0};
// 値4が含まれているかContainsメソッドで調べる
Console.WriteLine(
"Contains 4? {0}",
s.Contains(4)
);
// 値4が含まれているかTryGetValueメソッドで調べる
// (含まれている場合、その値をoutパラメータで取得することもできる)
Console.WriteLine(
"TryGetValue 4? {0}",
s.TryGetValue(4, out var val)
);
}
}
Contains 4? True TryGetValue 4? True
ContainsメソッドとTryGetValueメソッドは、どちらもHashSet・SortedSet内に指定した値の要素があるかどうかを調べるという点では同じです。 一方TryGetValueメソッドは、要素がある場合には実際にHashSet・SortedSet内に格納されている値を取得できる点が異なります。
TryGetValueメソッドは、IEqualtyComparer<T>を指定してHashSetを構築した場合、またはIComparer<T>を指定してSortedSetを構築した場合などにおいて、単に値が含まれているかどうかだけでなく、実際に格納されている値を知りたい場合に有効に機能します。
例えば、大文字小文字の違いを無視するHashSet・SortedSetを構築したときに、HashSet・SortedSetにALICE
という値が含まれているか調べつつ、実際に格納されている値が何なのか(Alice
またはalice
、もしくはそれ以外なのか)を知りたい、といった場合には、ContainsメソッドではなくTryGetValueメソッドを使うことができます。
HashSetにIEqualtyComparer<T>を指定して構築する例については§.HashSetでの等価性比較のカスタマイズ、SortedSetにIComparer<T>を指定して構築する例については§.SortedSetでの大小比較のカスタマイズを参照してください。