为什么给出错误表达式不能包含lambda表达式?

时间:2014-07-16 07:07:54

标签: c# linq

我想从列表中获取单个对象

Node node= ListNodes.where(n=>n.path=="c:\\test").single();

OR

Node node= ListNodes.Single(n=>n.path=="c:\\test");

ListNodes是Node类的列表

但两个代码都给我错误,

  

表达式不能包含lambda表达式。

有谁能告诉我,出了什么问题?

4 个答案:

答案 0 :(得分:4)

这是即时窗口中显示的消息。之所以发生这种情况,是因为lambda表达式通常涉及捕获的范围更改代码的整个结构;在编译期间可以很好地完成,但不能在调试期间动态发生。因此:立即窗口不支持此功能。

enter image description here

可以一些 lambdas 可以在立即窗口中成功处理而不重写(你的可能就是其中之一),但是:

  • 当时部分工作的功能往往会导致更多混乱
  • 它仍然需要努力进行范围,设计,实施,测试,记录,翻译和支持 - 到目前为止,这些努力已明确用于其他地方

答案 1 :(得分:0)

你需要使用转义字符。

Node node= ListNodes.Single(n=>n.path=="c:\\test");

Node node= ListNodes.Single(n=>n.path==@"c:\test");

答案 2 :(得分:0)

  1. 在Where。中使用大写'W'。
  2. 当你有路径时,'\'需要'\'。在字符串前使用“@”。
  3. 如果上述两项不起作用,则:

    我们不知道ListNode是什么类型。我的猜测是它没有一个名为'Where'或'Single'的扩展函数,或者你在代码中缺少'using System.Linq'语句。

    using System.Linq;
    
    // blah blah
    
    Node node= ListNodes.Where(n=>n.path == @"c:\test").Single();
    

答案 3 :(得分:0)

您可以像下面这样使用它:

        var ListNodes = new List<Node>() { new Node { path = "c:\\test" } };
        Node node = ListNodes.Where(n => n.path == "c:\\test").Single();