Вы забыли return
результат утверждения:
MyDictionary.Keys.Where(delegate(string s) { return s.Length == 5; });
Думай о delegate
, как полный метод, который должен быть как можно более независимым, за исключением части именования. Таким образом, вы можете себе представить, как:
delegate(string s) {
// you would need to return something here:
return s.Length == 5;
}
UPDATE:
Кроме того, подумайте об этих 2 лямбды:
MyDictionary.Keys.Where(w => w.Length == 5); // works
MyDictionary.Keys.Where(w => { w.Length == 5 }); // does not work
Почему второй один не работает? Подумайте об этом, чтобы получить лучшее представление о том, что происходит. Это просто упрощение изображения:
Первый лямбда-это утверждение: w.Length == 5
, и инструкция имеет результат, который возвращает его на самом деле. Не правда ли?
Но второй: { w.Length == 5 }
- это блок. И блок ничего не возвращает, за исключением того, что вы явно это делаете.
Заявление lambdas, подобно анонимным методам, не может использоваться для создания деревьев выражений. –
@AmitKumarGhosh Правильное, но не релевантное здесь. Этот вопрос будет использовать 'Enumerable.Where' (взятие делегата), а не' Queryable.Where' (взятие дерева выражений). – hvd
«не работает здесь» недостаточно информации. Вы всегда должны * включать сообщение об ошибке, которое вы получаете. –