使用LINQ在空列表中应用count时返回0

DoI*_*oIt 0 c# linq list

我正在处理一个列表,以便在应用如下所示的过滤器后进行计数

ValueRaw = pCounts.Count() > 0 ? pCounts.SingleOrDefault(x => x.IsNew)?.Count : 0 
Run Code Online (Sandbox Code Playgroud)

上面的行返回nullpCounts.SingleOrDefault(x => x.IsNew)为空

如何将其更改为返回0而不是null

Met*_*lon 6

你可以这样做(你不需要第一次检查):

ValueRaw = pCounts.SingleOrDefault(x => x.IsNew)?.Count ?? 0;
Run Code Online (Sandbox Code Playgroud)

这使用了空煤化算子(见这里).如果它不为null,则取其剩下的值,否则为其右边的值.

但是,您当然可以使用条件标记来编写它:

var temp = pCounts.SingleOrDefault(x => x.IsNew)?.Count;
ValueRaw = temp == null ? 0 : temp;
Run Code Online (Sandbox Code Playgroud)

甚至更长的if:

var temp = pCounts.SingleOrDefault(x => x.IsNew)?.Count;
if(temp == null)
    ValueRaw = 0;
else
    ValueRaw = temp;
Run Code Online (Sandbox Code Playgroud)