Название «элемент» не существует в текущем контексте - PullRequest
0 голосов
/ 30 апреля 2019

Я изучаю c # и столкнулся с проблемой при попытке использовать цикл 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 ]

4 голосов
/ 30 апреля 2019

Используемый вами ForEach метод List, который принимает Action.

Я думаю, что вам нужен цикл foreach, использующий ключевое слово foreach 1008 *

foreach (int item in theList)
{
    if (item % 2 == 0)
    {
        total += item;
    }
}

Конечно, если вы хотите сделать это ForEach, тогда:

theList.ForEach((item) =>
    {
        if (item % 2 == 0)
        {
            total += item;
        }
    });

Метод ForEach принимает Action, что

(Получите int) => (Если оно четное, добавьте к итогу)

и вызовите это Action для каждого элемента списка, поэтому конечный результат должен быть таким же, как при использовании цикла foreach.

Поскольку вы изучаете C #, я полагаю, что эта статья хорошо читается в разделе Действия.

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

0 голосов
/ 30 апреля 2019

foreach(type variableName in IEnumerable<T>) и List<T>.ForEach(Action<T>) отличаются.первый - синтаксис C # для цикла любого экземпляра IEnumerable<T> (включая List<T>), второй - метод 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()
}

0 голосов
/ 30 апреля 2019

Если вы хотите использовать метод расширения ForEach, вам нужно использовать Action, чтобы у вас был прямой доступ к элементам списка, как показано ниже:

theList.ForEach(item => total = item % 2 == 0 ? total + item : total);

или вы можете использовать foreach, как показано ниже, для зацикливания элементов списка:

foreach(var item in theList) 
{
    if (item % 2 == 0)
    {
        total += item;
    }
}
...