c# - 与 decimal 的模式匹配总是因可空的 decimal 累加器而失败

标签 c#

是什么导致 sum 始终为 null

object[] data = new object[]
{
    2.2M,
    3m,
    1,
    "string",
    true,
    false,
    2.3f
};

decimal? sum = null;
foreach (object x in data)
{
    if (x is decimal d)
        sum += d;
}

最佳答案

为什么不用专门为此设计的老式 Linq

  object[] data = new object[] {
    2.2M,
    3m,
    1,
   "string",
    true,
    false,
    2.3f };

  // If you want 2.2m + 3m == 5.2  
  var sum = data
    .OfType<decimal?>() // we want decimal only: 2.2M as well as 3m
    .Sum();             // summed up    

编辑:如果您想在空过滤集合上获取null(不是0m)(即当集合不存在时)没有任何 decimal 项)我们必须修改聚合:

  var sum = data
    .OfType<decimal?>()
    .Aggregate((decimal?)null, 
               (s, a) => s == null ? a : s + a);

关于c# - 与 decimal 的模式匹配总是因可空的 decimal 累加器而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47902539/

相关文章:

c# - 游戏数据存储

c# - 如何从 Windows Media Server 2008 捕获实时流

c# - N皇后算法。情节扭曲 : The Queen is a Knight too

c# - 带有 DbSet 的 LINQ ToListAsync 表达式

C# 绘图书

c# - 如何在以编程方式生成 Markdown 表时转义字符串

c# - 用于快速插入/删除的 .net 集合

c# - .NET TPL 数据流源中的线程安全

c# - 在每个 Controller 操作之前/之后执行代码

c# - 为什么我不能修改拆箱转换的结果?