如何验证lambda表达式是否有结果

时间:2011-11-23 04:03:08

标签: c# attributes lambda

我是使用lambda表达的新手,对不起是一个愚蠢的问题。无论如何,请考虑这个陈述:

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

我的问题是如何判断谓词部分是否有结果,考虑methodinfos没有任何成员具有属性。我收到一条错误消息, “序列中没有元素”

2 个答案:

答案 0 :(得分:5)

如果由于没有元素而导致Single失败,请使用SingleOrDefault。它将返回单个匹配元素(如果存在),或者返回类型的默认值,对于引用类型(类),它将是null。在使用结果之前,您需要检查null。

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

包中的另一个方法对是FirstFirstOrDefault。与Single一样,它们将返回匹配元素。与Single不同,如果 more 存在匹配的一个元素,则它们不会抛出异常。如果您有一个序列需要 a 匹配元素,而不一定唯一的匹配元素,请记住这些。

答案 1 :(得分:0)

有Any()扩展方法可以检查你。

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

或者 -

if (methodInfos.Any(k => predicate(k)))
相关问题