C# 4.0 使用列表在字典中查找匹配的值?

C# 4.0 使用列表在字典中查找匹配的值?,c#-4.0,dictionary,generic-list,C# 4.0,Dictionary,Generic List,我有以下字典: Dictionary<int, List<TypeA>> dict Dictionary 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, T

我有以下字典:

Dictionary<int, List<TypeA>> dict
Dictionary 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};
dict.Add(1,新列表{TypeA.1,TypeA.2,TypeA.3};
dict.Add(11,新列表{TypeA.2,TypeA.6,TypeA.7};
dict.Add(23,新列表{TypeA.3,TypeA.4,TypeA.9};
使用一行语法(lambdas),如何在整个字典中找到TypeA.3


这将被封装到一个方法中,该方法返回bool.True==匹配和false==不匹配。上面的结果将返回True。

如果您只是想看看
TypeA.3
是否存在于任何地方,您可以使用:

bool exists = dict.Values.Any(v => v.Any(t => t == TypeA.3));

下面是一些受Reed启发的工作代码

您可以将此弹出到LINQPad并查看它的运行。获取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(字典列表,键入什么)
{
返回list.Any(dctnry=>dctnry.Value.Any(lst=>lst==what));
}
公共静态void Main()
{
Dictionary dict=新字典();
dict.Add(1,新列表{TypeA.1,TypeA.2,TypeA.3};
dict.Add(11,新列表{TypeA.2,TypeA.6,TypeA.7};
dict.Add(23,新列表{TypeA.3,TypeA.4,TypeA.9};
如果(勾选(dict,A.3型))
控制台。写入线(“找到”);
其他的
控制台。写入线(“丢失”);
}
您还可以更进一步,制作一个通用版本,如

    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)));
    }
static bool CheckIT(字典列表,T what)其中T:i可满足
{
返回list.Any(dict=>dict.Value.Any(l=>l.Equals(what));
}
那么你会说

   if (CheckIT<TypeA>(dict,TypeA.3 ))
if(勾选(dict,TypeA.3))
但你也可以说

   if (CheckIT<int>(dict,13 ))
if(勾选(dict,13))
因为我没有定义TypeA