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