这是我的代码:
string displayName = Dictionary.FirstOrDefault(x => x.Value.ID == long.Parse(options.ID)).Value.DisplayName;
如果
x.Value.ID
与options.ID
匹配,则该代码可以正常工作。但是,如果没有,我会得到一个NullReferenceException
。 最佳答案
如果没有项目与谓词匹配,则FirstOrDefault
返回类型的默认值。对于null
的引用类型。多数民众赞成在异常(exception)的原因。
因此,您只需要首先检查null
即可:
string displayName = null;
var keyValue = Dictionary
.FirstOrDefault(x => x.Value.ID == long.Parse(options.ID));
if(keyValue != null)
{
displayName = keyValue.Value.DisplayName;
}
但是,如果要搜索值,那么词典的关键字是什么?
Dictionary<tKey,TValue>
用于通过键查找值。也许您应该重构它。另一种选择是使用
DefaultIfEmpty
提供默认值:string displayName = Dictionary
.Where(kv => kv.Value.ID == long.Parse(options.ID))
.Select(kv => kv.Value.DisplayName) // not a problem even if no item matches
.DefaultIfEmpty("--Option unknown--") // or no argument -> null
.First(); // cannot cause an exception
关于c# - 如果找不到匹配的内容,则FirstOrDefault返回NullReferenceException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21161203/