我是使用lambda表达的新手,对不起是一个愚蠢的问题。无论如何,请考虑这个陈述:
MethodInfo methodInfo = methodInfos.Where(k => k.GetCustomAttributes(typeof(DLMethodAttribute), false).Length > 0).Single();
我的问题是如何判断谓词部分是否有结果,考虑methodinfos没有任何成员具有属性。我收到一条错误消息, “序列中没有元素”
答案 0 :(得分:5)
如果由于没有元素而导致Single
失败,请使用SingleOrDefault
。它将返回单个匹配元素(如果存在),或者返回类型的默认值,对于引用类型(类),它将是null
。在使用结果之前,您需要检查null。
var methodInfo = methodInfos.Where(k => predicate(k)).SingleOrDefault();
if (methodInfo != null)
{
// use result
}
包中的另一个方法对是First
和FirstOrDefault
。与Single
一样,它们将返回匹配元素。与Single
不同,如果 more 存在匹配的一个元素,则它们不会抛出异常。如果您有一个序列需要 a 匹配元素,而不一定唯一的匹配元素,请记住这些。
答案 1 :(得分:0)
有Any()扩展方法可以检查你。
if (methodInfos.Where(k => predicate(k)).Any())
或者 -
if (methodInfos.Any(k => predicate(k)))