Как проверить, имеет ли лямбда-выражение результат - PullRequest
0 голосов
/ 23 ноября 2011

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

MethodInfo methodInfo = methodInfos.Where(k => k.GetCustomAttributes(typeof(DLMethodAttribute), false).Length > 0).Single();

Мой вопрос: как можно идентифицировать, если предикатная часть имеет результат, учитывая, что methodinfos не имеет ни одного члена, имеющего атрибут. У меня есть сообщение об ошибке, «Последовательность не содержит элементов»

Ответы [ 2 ]

5 голосов
/ 23 ноября 2011

Если существует вероятность сбоя Single из-за отсутствия элементов, используйте SingleOrDefault.Он вернет единственный соответствующий элемент, если таковой существует, или значение по умолчанию для типа, которое будет null для ссылочных типов (классов).Вам нужно будет проверить нулевое значение, прежде чем использовать результат.

var methodInfo = methodInfos.Where(k => predicate(k)).SingleOrDefault();
if (methodInfo != null)
{
     // use result
} 

Другая пара методов, которая должна быть в вашей сумке, - это First и FirstOrDefault.Как и Single, они вернут соответствующий элемент.В отличие от Single, они не будут генерировать исключение, если больше , чем существует один элемент, который соответствует.Имейте это в виду, если у вас когда-нибудь есть последовательность, из которой вам нужен соответствующий элемент, а не обязательно единственный соответствующий элемент.

0 голосов
/ 23 ноября 2011

Существует метод расширения Any (), который он может проверить для вас.

if (methodInfos.Where(k => predicate(k)).Any())

Или -

if (methodInfos.Any(k => predicate(k)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...