这是我的代码:

string displayName = Dictionary.FirstOrDefault(x => x.Value.ID == long.Parse(options.ID)).Value.DisplayName;

如果x.Value.IDoptions.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/

10-12 07:40
查看更多