隐式类型变量出错

3 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;
Run Code Online (Sandbox Code Playgroud)

元素字典

        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>();
Run Code Online (Sandbox Code Playgroud)

怎么纠正呢?

Jon*_*eet 12

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

var mailgroup = emails.Where(p =>IsValidFormat(p.Value))
                      .Select(p => p.Value);
Run Code Online (Sandbox Code Playgroud)

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

var mailgroup = emails.Where(p =>IsValidFormat(p.Value));
Run Code Online (Sandbox Code Playgroud)

并完全删除"选择".

如果你只是希望值(按照第一个代码段),我建议使用:

var mailgroup = emails.Values.Where(p =>IsValidFormat(p));
Run Code Online (Sandbox Code Playgroud)

没有任何括号,您对"选择"的引用是一个方法组 - 您转换为委托的事物,例如

Func<int> x = SomeMethod; // Where SomeMethod is declared as "int SomeMethod()"
Run Code Online (Sandbox Code Playgroud)

它并没有真正意义的使用Select在这种情况下,方法组,虽然只是可行?


JSB*_*ոգչ 9

你错过()Select.因此,分配给变量的是对Select方法的引用,编译器将其称为"方法组".

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

  • (空的select语句*不是*有效.) (3认同)