【问题标题】:Summing integer array求和整数数组
【发布时间】:2018-11-29 06:49:27
【问题描述】:

我有以下代码

int[] array = new int[10] { 4, 50 , 60 , 80 , 120 , 46 , 52 , 60 , 18 , 221};


var sum = (from num in array
           where ((num % 4) != 0 && (num % 6 ) != 0) && ((num % 2) != 0)
           select array);

Console.Write(sum.Sum());

问题是我不能使用Sum()。它说

'System.Collections.Generic.IEnumerable' 不包含 'Sum' 的定义和最佳扩展方法重载 'System.Linq.Queryable.Sum(System.Linq.IQueryable)'

我怎样才能完成这项工作?

【问题讨论】:

  • 是的,我已经使用 System.Linq 添加了。

标签: c# arrays .net linq


【解决方案1】:

从此更改您的代码:

var sum = (from num in array
    where ((num % 4) != 0 && (num % 6 ) != 0) && ((num % 2) != 0)
    select array);

到这里:

 var sum = (from num in array
            where ((num % 4) != 0 && (num % 6) != 0) && ((num % 2) != 0)
            select num);

您需要select num 而不是select array。阅读更多https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.select?view=netframework-4.7.2

【讨论】:

    【解决方案2】:

    根据您收到的错误消息,

    “System.Collections.Generic.IEnumerable”不包含“Sum”的定义和最佳扩展方法重载“System.Linq.Queryable.Sum(System.Linq.IQueryable)”

    可以观察到变量num 的类型是IEnumerable<int[]>,而不是您可能期望的IEnumerable<int>。您可以通过将代码更改为 select num 而不是 select array 来解决此问题。

    另外,我建议在这里使用流畅的扩展方法,所以你不要在同一个地方混合两种样式。保持格式和样式一致通常是一种很好的做法。它看起来像这样:

    var sum = array
        .Where(num => num%4 != 0 && num%6 != 0 && num%2 != 0 )
        .Sum();
    

    【讨论】:

      猜你喜欢
      • 2020-06-28
      • 1970-01-01
      • 2013-12-13
      • 2011-01-26
      • 2021-12-09
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多