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