Я пытаюсь получить один объект из списка
Node node= ListNodes.where(n=>n.path=="c:\\test").single();
ИЛИ
Node node= ListNodes.Single(n=>n.path=="c:\\test");
Где ListNodes - список классов Node
Но оба кода дают мне ошибку,
Выражение не может содержать лямбда-выражения.
Может ли кто-нибудь сказать мне, что не так?
Это сообщение, появившееся в окне Immediate. Это происходит потому, что лямбда-выражения обычно включают захваченные области, которые изменяют всю структуру кода; хорошо делать во время компиляции, но не то, что может произойти "на лету" во время отладки. Следовательно: это не поддерживается в окне Immediate.
Вероятно, есть некоторые лямбды, которые могут быть успешно обработаны в окне Immediate без перезаписи (и ваш, вероятно, один из них), но:
вам нужно использовать escape-символ.
Node node= ListNodes.Single(n=>n.path=="c:\\test");
или
Node node= ListNodes.Single(n=>n.path==@"c:\test");
Вы можете использовать его, как показано ниже:
var ListNodes = new List<Node>() { new Node { path = "c:\\test" } };
Node node = ListNodes.Where(n => n.path == "c:\\test").Single();
Если два выше не работают, то:
Мы не знаем, какой тип ListNode есть. Я предполагаю, что он либо не имеет функции расширения, называемой "Где", либо "Одиночный", или вам не хватает инструкции using System.Linq в коде.
using System.Linq;
// blah blah
Node node= ListNodes.Where(n=>n.path == @"c:\test").Single();
ListNodes
?@"c:\test"
- так как \ t - escape-последовательность