我想发表以下声明:
var block = blocksById.FirstOrDefault(X => X.Value == tracResult.ID).Key
我的问题是如果我有FirstOrDefault null值,如何更正确地处理它.
我只是不觉得如果声明是可以在这里的唯一解决方案…
解决方法
将它拆分为Where和Select:
var block = blocksById.Where(x => x.Value == tracResult.ID) .Select(x => x.Key) .FirstOrDefault();
这样,如果FirstOrDefault返回null,您将不会获得NullRefferenceException.
var block = blocksById.Where(x => x.Value == tracResult.ID) .Select(x => x.Key) .FirstOrDefault() ?? somedefaultvalue;
或者@Silvermind声明为非可空类型(int):
var block = blocksById.Where(x => x.Value == tracResult.ID) .Select(x => (int?) x.Key) .FirstOrDefault() ?? somedefaultvalue;
更新:有些人似乎怀疑这是一个有效的用例,并认为必须在程序中稍后进行null检查.
虽然在很多情况下都是如此,但并不总是必须如此,或者如果是这样的话,这种方式可能会更方便.
一些例子:
//one liner,null check delegated (not my favorite): return SomeCalculatedValue(collection.Where(condition).Select(selection).FirstOrDefault()); //or a mapping (shown with default value): var result = collection.Where(condition) .Select(c => { Foo = c.Foo,Bar = c.Bar }).FirstOrDefault()) ?? new { Foo = "New",Bar = "Empty"};
原文地址:https://www.jb51.cc/csharp/93169.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。