这是我的代码:
string displayName = Dictionary.FirstOrDefault(x => x.Value.ID == long.Parse(options.ID)).Value.DisplayName;
该代码工作正常,如果x.Value.ID
火柴options.ID
。但是,我得到了NullReferenceException
如果没有。
FirstOrDefault
如果没有项目与谓词匹配,则返回类型的默认值。对于引用类型来说null
。这就是例外的原因。
所以你只需要检查null
first:
string displayName = null;
var keyValue = Dictionary
.FirstOrDefault(x => x.Value.ID == long.Parse(options.ID));
if(keyValue != null)
{
displayName = keyValue.Value.DisplayName;
}
但是如果您在值中搜索,字典的键是什么? ADictionary<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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)