почему выдает ошибку Выражение не может содержать лямбда-выражения?

1

Я пытаюсь получить один объект из списка

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

ИЛИ

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

Где ListNodes - список классов Node

Но оба кода дают мне ошибку,

Выражение не может содержать лямбда-выражения.

Может ли кто-нибудь сказать мне, что не так?

  • 2
    Какой тип это ListNodes ?
  • 1
    просто sidenote - я бы изменил строку на @"c:\test" - так как \ t - escape-последовательность
Показать ещё 10 комментариев
Теги:
linq

4 ответа

3
Лучший ответ

Это сообщение, появившееся в окне Immediate. Это происходит потому, что лямбда-выражения обычно включают захваченные области, которые изменяют всю структуру кода; хорошо делать во время компиляции, но не то, что может произойти "на лету" во время отладки. Следовательно: это не поддерживается в окне Immediate.

Изображение 174551

Вероятно, есть некоторые лямбды, которые могут быть успешно обработаны в окне Immediate без перезаписи (и ваш, вероятно, один из них), но:

  • функция, которая работает некоторое время, имеет тенденцию вызывать еще большую путаницу
  • он по-прежнему будет прилагать усилия для охвата, проектирования, внедрения, тестирования, документирования, перевода и поддержки - и эти усилия явно были потрачены в других местах до сих пор
0

вам нужно использовать escape-символ.

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

или

Node node= ListNodes.Single(n=>n.path==@"c:\test");
  • 0
    Да, OP делает ... но это не исправляет ошибку
  • 0
    попробуйте с Node node = ListNodes.Single (n => n.path.Contains (@ "c: \ test")); или попробуйте с помощью Node node = ListNodes.Single (n => n.path.Equals (@ "c: \ test"));
Показать ещё 2 комментария
0

Вы можете использовать его, как показано ниже:

        var ListNodes = new List<Node>() { new Node { path = "c:\\test" } };
        Node node = ListNodes.Where(n => n.path == "c:\\test").Single();
0
  1. Используйте столицу "W" в Где.
  2. Когда у вас есть пути, "\" должно быть "\". Используйте "@" перед строками.

Если два выше не работают, то:

Мы не знаем, какой тип ListNode есть. Я предполагаю, что он либо не имеет функции расширения, называемой "Где", либо "Одиночный", или вам не хватает инструкции using System.Linq в коде.

using System.Linq;

// blah blah

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню