Анонимные методы с возвращаемым типом в .Net

На самом деле это вопрос моего любопытства, поскольку я знаю, что есть другие способы обойти эту проблему.

У меня есть свойство в моем классе "Item" - "MyProperty" - которое я хочу оценить. Я хочу перебирать коллекцию - "MyItemCollection" - и если есть класс "Item", чье свойство "MyProperty" не является ничем, я хочу установить логический флаг, чтобы указать, что коллекция содержит ненулевое MyProperty для любого из его объекты "Item".

Private ContainsPOF = Function() (From thisItem As Item In MyItemCollection Where Item.MyProperty IsNot Nothing Select item).Count > 0

Это дает мне предупреждение о «Отклонении переменной без предложения« Как »; ​​предполагаемый тип объекта», поэтому я попытался

Private ContainsPOF As Boolean = Function() (From thisItem As Item In MyItemCollection Where Item.MyProperty IsNot Nothing Select item).Count > 0 subc).Count > 0

Однако это дает мне ошибку «Выражение Lamda не может быть преобразовано в« логическое значение », поскольку« логическое значение »не является типом делегата»

Есть ли способ сделать возврат этого типа функции безопасным, или я должен просто использовать другой метод (функция старого стиля)?

Спасибо.


person Ben    schedule 03.02.2010    source источник


Ответы (2)


Я думаю, вы хотите объявить его как Func(Of Boolean) вместо этого:

Private ContainsPOF As Func(Of Boolean) = [...]

Насколько я вижу, это не создает свойство (согласно вашему первому абзацу). Почему бы не объявить это как обычное свойство?

person Jon Skeet    schedule 03.02.2010
comment
Извините, я не совсем ясно выразился в своем вопросе, я переформулировал вопрос, чтобы, надеюсь, сделать его немного яснее. Однако ваш ответ работает отлично. Однако почему вы не можете объявить код, как я сделал во втором примере? Спасибо - person Ben; 03.02.2010
comment
@Ben: Потому что ваш второй пример пытается объявить логическое поле, которое будет иметь значение true или false. Значение, которое вы хотите сохранить, представляет собой функцию, которая при вызове может возвращать значение true или false. - person Jon Skeet; 03.02.2010

это может быть понятнее, поскольку выражение linq соответствует любым элементам в коллекции, которые не являются нулевыми, например:

ContainsPDF = ThisCollection.Any(x=>x.MyClass IsNot Nothing);
person gum411    schedule 03.02.2010