我有以下LINQ查询火灾和异常时FirstOrDefault()
返回null。理想情况下,我想避免空检查。有没有办法做到这一点?如果没有满足FirstOrDefault()
呼叫的CPOffsets
,我希望返回0
。LINQ - FirstOrDefault(),然后选择()
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()
,但我认为在这里可能适用?
这实际上是关于简明扼要,你会得到......大部分时间“足够好”是不够好:-) – theMayer 2013-03-20 23:47:26
我同意。如果你想要它更简洁,你可能不得不推出你自己的方法或扩展方法。 (这并不一定是坏事)编辑:没有错'双偏置= DetermineOffset(OrderedOffsets,cpTime);'或'双偏置= OrderedOffsets.DetermineOffset(cpTime)'或'双偏置= OrderedOffsets.DetermineOffset(O = > o.OffsetDateTime> cpTime);'如果你想对谓词有更多的控制权。 – 2013-03-20 23:48:23
检查了这一点:HTTP://stackoverflow.com/questions/14791514/streamlined-way-to-do-c-sharp-run-time-type-identification-that-avoids-a-null-ch/14791613#14791613 – 2013-03-20 23:53:41