名称“ item”在当前上下文中不存在

时间:2019-04-30 05:00:39

标签: c# visual-studio asp.net-core scope

我正在学习c#,遇到一个问题,试图在List上使用foreach循环。它一直说“项目”不存在。这是代码:

 static int SumOf(List<int> nums)
    {

        int total = 0;

        List<int> theList = new List<int>(nums);


        theList.ForEach(int item in theList){

            if (item % 2 == 0)
            {
                total += item;
            }

        }
        return total;


    }

foreach方法应该遍历列表并将偶数加到总数中。

3 个答案:

答案 0 :(得分:4)

您使用的ForEach是采用List的{​​{1}}方法。

我认为您想要的是使用Action关键字的foreach循环

foreach

当然,如果您想以foreach (int item in theList) { if (item % 2 == 0) { total += item; } } 的方式这样做,那么:

ForEach

theList.ForEach((item) => { if (item % 2 == 0) { total += item; } }); 方法采用的ForEach

(接收一个整数)=>(如果是偶数,则加到总数中)

并在列表的每个元素上调用此Action,因此最终结果应与使用Action循环相同。

由于您正在学习C#,所以我认为本文是关于Actions的不错的阅读。

https://docs.microsoft.com/en-us/dotnet/api/system.action?view=netframework-4.8

这是ForEach的文档。

https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.foreach?view=netframework-4.8

答案 1 :(得分:0)

如果要使用扩展方法ForEach,则需要使用Action,因此您可以直接访问以下列表项:

foreach

或者您可以如下使用foreach(var item in theList) { if (item % 2 == 0) { total += item; } } 在列表项中循环:

SET HEADING OFF
SET FEEDBACK OFF 
SET ECHO OFF
SET TERMOUT OFF
SET LINESIZE 2000
SET PAGESIZE 50000
SET SQLFORMAT ANSICONSOLE

答案 2 :(得分:0)

foreach(type variableName in IEnumerable<T>)List<T>.ForEach(Action<T>)是不同的。 第一个是循环任何IEnumerable<T>实例(包括List<T>)的C#语法,第二个是List<T>的方法。 循环列表,您可以

static int SumOf(List<int> nums)
{
    nums = nums ?? throw new ArgumentNullException(nameof(nums)); // C# 7 syntax for check the nums is null
    int total = 0;
    foreach(var item in nums)
    {
        total += item;
    }
    return toal;
}

static int SumOf(List<int> nums)
{
    nums = nums ?? throw new ArgumentNullException(nameof(nums)); // C# 7 syntax for check the nums is null
    int total = 0;
    nums.ForEach(item=>total += item;)
    return toal;
}

使用Linq扩展名方法

using System.Linq;

static int SumOf(List<int> nums)
{
    nums = nums ?? throw new ArgumentNullException(nameof(nums)); // C# 7 syntax for check the nums is null
    return nums.Sum()
}