在IEnumerable.First函数中,如果没有匹配,我该如何处理?目前它只是崩溃......
MySPListItem firstItem = itemCollection.First(item => !item.isFolder);
if (firstItem != null)
{
TreeNode firstNode = GetNodeByListItem(my_treeview.Nodes, firstItem, ReportObject);
if (firstNode != null)
{
ReportObject.log("Selecting the first PDF");
selectPDF(my_treeview, firstNode, queryStr_param);
}
}
Run Code Online (Sandbox Code Playgroud)
错误信息:
Sequence不包含匹配元素
Stacktrace:at System.Linq.Enumerable.First [TSource](IEnumerable1 source, Func2谓词)
Jod*_*ell 19
好的,如果没有第一个是特殊的,
try
{
var first = enumerable.First();
}
catch (InvalidOperationException)
{
// Oops, that was exceptional.
}
Run Code Online (Sandbox Code Playgroud)
如果您预计在某些有效情况下可能没有第一个,
var first = enumerable.FirstOrDefault();
if (first == default(someType)) // null for reference types.
{
// Ok, I need to deal with that.
}
Run Code Online (Sandbox Code Playgroud)
在null检查查找时,您不在谓词中.这条线
foundItem = itemCollection.Find(item => item.item.ID == PDFID);
Run Code Online (Sandbox Code Playgroud)
可能会抛出异常它item是null(有你插入一个null集合中的项目吗?),或者item.item是null(你确定它总是在那里?).
你可以这样做:
foundItem = itemCollection.Find(item => item != null &&
item.item != null &&
item.item.ID == PDFID);
Run Code Online (Sandbox Code Playgroud)
更健谈,但你不会得到一个NullReferenceException.
编辑嗯,你改变了你的问题.现在你做First.如果找不到任何内容,该First方法将抛出异常.使用FirstOrDefault而不是返回null一个类或一个默认值struct.
foundItem = itemCollection.FirstOrDefault(item => item != null &&
item.item != null &&
item.item.ID == PDFID);
Run Code Online (Sandbox Code Playgroud)