我可以使用LINQ的条件后语句吗?

时间:2014-01-22 10:21:54

标签: c# linq sum conditional

这是我获得总和的方式

double? myVar = myList.Sum(x => x.MyItem);

如果.Sum()在同一行中返回0,是否可以用null替换myVar?

我不想使用

if(myVar == 0) myVar = null;

LINQ是否有条件后声明?

1 个答案:

答案 0 :(得分:5)

听起来你想要与null-coalescing运算符相反,而LINQ或C#语言中没有任何内容可以帮助你。如果您愿意,可以创建自己的扩展方法:

public T? NullIfDefault<T>(this T? value) where T : struct
{
    if (value == null)
    {
        return value;
    }
    return EqualityComparer<T>.Default.Equals(default(T), value.Value)
        ? null : value;
}

然后:

double? myVar = myList.Sum(x => x.MyItem).NullIfDefault();

(代码NullIfDefault的编码方式还有其他各种选项,例如使用Nullable<T>.GetValueOrDefault() - 您可能想要找到最喜欢的形式。)