我有下面的LINQ查询,当FirstOrDefault()
返回null时会触发和异常。理想情况下,我希望避免null检查。有没有办法做到这一点?如果没有满足FirstOrDefault()
调用的CPOffsets
,我希望返回0
。
double offset = OrderedOffsets.FirstOrDefault(o => o.OffsetDateTime > cpTime).CPOffset;
我能看到的实现这一点的唯一方法是:
CPOffset cpOffset = OrderedOffsets.FirstOrDefault(o => o.OffsetDateTime > cpTime);
double offset = cpOffset != null ? cpOffset.CPOffset : 0;
有没有其他更简洁的方法?在FirstorDefault()
之后使用Select()
不能编译,但我认为在这里可能是合适的?
发布于 2013-03-21 07:49:43
我想这应该行得通,我不在VS附近去检查它...
OrderedOffsets.Where(o => o.OffsetDateTime > cpTime).Select(x => x.CPOffset).FirstOrDefault();
发布于 2013-03-21 07:50:27
DefaultIfEmpty
可用于确保集合始终至少有一个元素。
double offset = OrderedOffsets.Where(o => o.OffsetDateTime > cpTime)
.Select(o => o.CPOffset)
.DefaultIfEmpty()
.First();
发布于 2013-03-21 08:38:30
我认为一个好的模式可能是:
double offset = (OrderedOffsets.FirstOrDefault(o => o.OffsetDateTime > cpTime) ?? someDefaultObject).CPOffset;
使用someDefaultObject
作为保存默认值的对象...有了这个模式,你可以很容易地通过你的代码改变你的默认值!
如果OrderedOffsets可以是一个结构,你也可以把你的默认值放在那里!:)
https://stackoverflow.com/questions/15536830
复制相似问题