【问题标题】:Can I use a post-conditional statement with LINQ?我可以在 LINQ 中使用后置条件语句吗?
【发布时间】:2014-02-12 08:19:02
【问题描述】:

这就是我得到我的总和的方式

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

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

我不想用

if(myVar == 0) myVar = null;

LINQ 有后置条件语句吗?

【问题讨论】:

  • MyItem的类型是什么?请注意,您的“我不想使用”似乎相反 - 从 null 到 0,而不是从 0 到 null。
  • @JonSkeet 这是double? 我编辑了问题!
  • 那么if 语句有什么问题?

标签: c# linq sum conditional


【解决方案1】:

听起来您想要与 null 合并运算符相反,而 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&lt;T&gt;.GetValueOrDefault() - 您可能想四处寻找最喜欢的形式。)

【讨论】:

  • 非常感谢您的解释。
猜你喜欢
  • 2012-05-02
  • 2021-08-03
  • 1970-01-01
  • 2018-06-21
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
相关资源
最近更新 更多