我有以下LINQ查询,当FirstOrDefault()返回null 时触发和异常.理想情况下,我想避免空检查.有没有办法做到这一点?0如果没有CPOffsets满足FirstOrDefault()电话的话我想回来.
double offset = OrderedOffsets.FirstOrDefault(o => o.OffsetDateTime > cpTime).CPOffset;
Run Code Online (Sandbox Code Playgroud)
我能看到实现这一目标的唯一方法如下:
CPOffset cpOffset = OrderedOffsets.FirstOrDefault(o => o.OffsetDateTime > cpTime);
double offset = cpOffset != null ? cpOffset.CPOffset : 0;
Run Code Online (Sandbox Code Playgroud)
还有另一种更简洁的方法吗?使用Select()后FirstorDefault()不编译,但我认为可能适合这里?
NSG*_*aga 46
我认为这应该有效,我不在VS附近检查出来......
OrderedOffsets.Where(o => o.OffsetDateTime > cpTime).Select(x => x.CPOffset).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
Ser*_*rvy 10
DefaultIfEmpty 可用于确保集合始终至少包含一个元素.
double offset = OrderedOffsets.Where(o => o.OffsetDateTime > cpTime)
.Select(o => o.CPOffset)
.DefaultIfEmpty()
.First();
Run Code Online (Sandbox Code Playgroud)
我认为一个好的模式可能是:
double offset = (OrderedOffsets.FirstOrDefault(o => o.OffsetDateTime > cpTime) ?? someDefaultObject).CPOffset;
Run Code Online (Sandbox Code Playgroud)
使用someDefaultObject保存默认值的对象...使用此模式,您可以通过代码轻松更改默认值!
如果 OrderedOffsets 可以是一个结构,您也可以将默认值放在那里!:)
| 归档时间: |
|
| 查看次数: |
47308 次 |
| 最近记录: |