我有以下字典:
Dictionary<int, List<TypeA>> dict
并添加了对象:
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};
使用单行语法(lambdas),如何在整个字典中找到任何TypeA.3?
这将封装到返回bool的方法中。真==匹配和假==不匹配。以上将会回归真实。
答案 0 :(得分:1)
如果您只想查看TypeA.3
是否存在,可以使用:
bool exists = dict.Values.Any(v => v.Any(t => t == TypeA.3));
答案 1 :(得分:1)
以下是一些受里德启发的工作代码。
您可以将其弹出到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。