Как считать в анонимном методе? - PullRequest
0 голосов
/ 01 декабря 2019

У меня есть реализация класса IntList. Я должен: Использовать возможность анонимных методов ссылаться на локальную переменную в их включающем методе и определенном методе «Act» для вычисления суммы элементов IntList (без написания каких-либо циклов самостоятельно). Это то, что я сделал до сих пор, но я сомневаюсь, что это правильно. Любые предложения и объяснения помогут мне здесь

Каков метод включения моего анонимного метода в этом случае?

public delegate bool IntPredicate(int x);
public delegate void IntAction(int x);


class IntList : List<int>
{
    public IntList(params int[] elements) : base(elements)
    {

    }

    public void Act(IntAction f)
    {
        foreach(int i in this)
        {
            f(i);
        }
    }

    public IntList Filter(IntPredicate p)
    {
        IntList res = new IntList();
        foreach (int i in this)
        {
            if (p(i))
            {
                res.Add(i);
            }
        }
        return res;
    }

}

class Program
{
    static void Main(string[] args)
    {
        // code here
        IntList xs = new IntList();
        // adding numbers, could be random. whatever really. Here just 0..29
        for(int i =0; i<30; i++)
        {
            xs.Add(i);
        }

        int total = 0;
        xs.Act(delegate (int x)
                        {
                            total = total + x;
                            Console.WriteLine(total);
                        }
               );
        Console.ReadKey();
    }
}

1 Ответ

1 голос
/ 01 декабря 2019

Я думаю, что эта часть является «анонимным методом» (потому что он определен inline и не имеет имени метода):

delegate (int x)
{
    total = total + x;
    Console.WriteLine(total);
}

Я думаю, что «включающий метод» равен Main().

Я думаю, что "локальная переменная", скорее всего, total.

Я запустил ваш код, и он мне кажется правильным.

...