我正在制作一个列表,以便在应用下面的过滤器
后计算ValueRaw = pCounts.Count() > 0 ? pCounts.SingleOrDefault(x => x.IsNew)?.Count : 0
当null
为空时,以上行返回pCounts.SingleOrDefault(x => x.IsNew)
如何更改它以返回0
而不是null
答案 0 :(得分:6)
你可以这样做(你不需要第一次检查):
ValueRaw = pCounts.SingleOrDefault(x => x.IsNew)?.Count ?? 0;
这使用了null Coalising运算符(参见here)。如果它不为空,则取其剩下的值,否则为其右边的值。
但是,您当然可以使用条件标记来编写它:
var temp = pCounts.SingleOrDefault(x => x.IsNew)?.Count;
ValueRaw = temp == null ? 0 : temp;
甚至更长时间使用if:
var temp = pCounts.SingleOrDefault(x => x.IsNew)?.Count;
if(temp == null)
ValueRaw = 0;
else
ValueRaw = temp;
答案 1 :(得分:3)
首先,不需要进行Count()
检查。当集合为空时,SingleOrDefault
将返回默认值(null
)。因此,您的原始表达式可以简化为:
ValueRaw = pCounts.SingleOrDefault(x => x.IsNew)?.Count;
如果您希望ValueRaw
在没有元素满足条件时为0
,则可以使用null-coalescing运算符:
ValueRaw = pCounts.SingleOrDefault(x => x.IsNew)?.Count ?? 0;
这将为您提供满足条件的第一个元素的Count
,或者如果没有这样的元素,则为0
。特别是,集合中的元素本身必须是集合(否则您无法将Count
应用于集合)。也许你真的打算使用Where
:
ValueRaw = pCounts.Where(x => x.IsNew).Count();
这将为您提供满足条件的元素数量。