隐式类型变量出错

时间:2009-10-19 21:26:55

标签: c# linq

将linq选择分配给隐式类型的局部变量“var”时,我会收到 跟随错误。

Error :Cannot assign method group to an implicitly-typed local variable

root : var mailgroup = emails.Where(p =>IsValidFormat(p.Value)).Select;

元素字典

        Dictionary<int, string> emails = new Dictionary<int, string>();
        emails.Add(1, "Marry@yahoo.com");
        emails.Add(2, "Helan@gmail.com");
        emails.Add(3, "Rose");
        emails.Add(4, "Ana");
        emails.Add(5, "Dhia@yahoo.com");
        Dictionary<int, string> dc = new Dictionary<int, string>();

如何纠正?

2 个答案:

答案 0 :(得分:12)

你有什么期望呢?您可能希望在那里进行实际的方法调用,例如:

var mailgroup = emails.Where(p =>IsValidFormat(p.Value))
                      .Select(p => p.Value);

或者如果你只想要键/值对,你可以使用:

var mailgroup = emails.Where(p =>IsValidFormat(p.Value));

并完全删除“选择”。

如果你只想要值(根据第一个代码片段)我建议使用:

var mailgroup = emails.Values.Where(p =>IsValidFormat(p));

如果没有任何括号,您对“选择”的引用就是一个方法组 - 您要转换为委托的东西,例如

Func<int> x = SomeMethod; // Where SomeMethod is declared as "int SomeMethod()"

在这种情况下使用Select作为方法组并没有什么意义,尽管 只是可行...

答案 1 :(得分:9)

()之后你遗失了Select。因此,分配给变量的是对Select方法的引用,编译器将其称为“方法组”。

顺便说一句,根据您发布的代码,我认为您根本不需要跟踪.Select()