求和整数数组

时间:2018-11-29 06:49:28

标签: c# arrays .net linq

我有以下代码

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)'

我该怎么做?

2 个答案:

答案 0 :(得分:7)

从此更改您的代码:

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

答案 1 :(得分: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();