C# проблема с передачей встроенного кода

Эй, я знаю, что уже есть много вопросов, в которых содержится ответ, который мне нужен, но мне тяжело перебирать Func/Action/Delegate/Lambda, и, как парень из JavaScript, все это кажется излишне сложным.

Я работаю с 2d массивами и хотел бы написать метод, который принимает int width, int height и любую форму встроенного кода, который будет вызываться с каждой парой x/y. Смысл в том, чтобы просто избежать ошибок и времени от написания вложенного цикла for снова и снова. Но я не уверен относительно правильного типа встроенного кода для использования, или как это выглядит. Я попробовал несколько комбо, но не могу заставить это сработать.

Какую подпись я должен использовать в методе, и как я это называю?

2 ответа

Решение

Я обычно использую действие в качестве параметра типа и лямбду при вызове:

ForEachPair(5, 5, (x, y) =>
{
    Console.Write(x + "," + y);
});

public void ForEachPair(int width, int height, Action<int, int> callback)
{
    for (int i = 0; i < width; i++)
    {
        for (int j = 0; j < height; j++)
        {
            callback(i, j);
        }
    }
}

Хотя есть много способов сделать это, один из самых простых и лучших способов - определить делегата и принять его в качестве аргумента.

delegate void XYFunction(int x, int y); // define the return type and args

void ForEachXYPair(int width, int height, XYFunction func)
{
    // open your loop however
    {
        func(x, y);
    }
}

А потом назвать это...

ForEachXYPair(4, 4, (int x, int y) => { work; });
// OR
ForEachXYPair(4, 4, new XYFunction(AMethodForAbstractionsSake));
Другие вопросы по тегам