以下は、Reed に触発された実用的なコードです。
これを LINQPad にポップして、実行を確認できます。http://linqpad.comでLINQPad を入手してください。
static bool CheckIT(Dictionary<int, List<TypeA>> theList, TypeA what)
{
return theList.Any(dctnry => dctnry.Value.Any(lst => lst == what));
}
public static void Main()
{
Dictionary<int, List<int>> dict = new Dictionary<int, List<int>>();
dict.Add(1, new List<TypeA>{TypeA.1, TypeA.2, TypeA.3};
dict.Add(11, new List<TypeA>{TypeA.2, TypeA.6, TypeA.7};
dict.Add(23, new List<TypeA>{TypeA.3, TypeA.4, TypeA.9};
if (CheckIT(dict,TypeA.3 ))
Console.WriteLine("Found");
else
Console.WriteLine("Lost");
}
これをさらに一歩進めて、次のような一般的なバージョンを作成することもできます
static bool CheckIT<T>(Dictionary<int, List<T>> theList, T what) where T : IEquatable<T>
{
return theList.Any(dict => dict.Value.Any(l => l.Equals(what)));
}
それからあなたは言うでしょう
if (CheckIT<TypeA>(dict,TypeA.3 ))
しかし、あなたは言うこともできます
if (CheckIT<int>(dict,13 ))
TypeA を定義していなかったので、私が行ったように。