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

Rob*_*Rob 0 c# lambda attributes

我是使用lambda表达的新手,对不起是一个愚蠢的问题.无论如何,请考虑此声明:

MethodInfo methodInfo = methodInfos.Where(k => k.GetCustomAttributes(typeof(DLMethodAttribute), false).Length > 0).Single();
Run Code Online (Sandbox Code Playgroud)

我的问题是如何判断谓词部分是否有结果,考虑methodinfos没有任何成员具有属性.我有一条错误消息告诉"序列不包含任何元素"

Ant*_*ram 5

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

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

你的包里有另一种方法就是FirstFirstOrDefault.就像Single,他们将返回匹配元素.与之不同Single,如果存在多个匹配的元素,它们不会抛出异常.注意以下几点,如果你有你需要的顺序一个从匹配的元素,不一定是唯一匹配的元素.