C# 传递内联代码时遇到问题

C# trouble passing inline code

嘿,我知道已经有很多问题包含了我需要的答案,但我很难在 Func/Action/Delegate/Lambda 之间进行筛选,作为一个 javascript 的人,这一切感觉不必要的复杂。

我正在使用 2d 数组,并且想编写一个方法来接受 int 宽度、int 高度和任何形式的内联代码,以便在每个 x/y 对中调用。重点只是为了避免一遍又一遍地编写嵌套 for 循环而产生的错误和时间。但我不确定要使用的内联代码的正确类型,或者它的外观。我尝试了很多组合,但无法解决问题。

我应该在方法上使用什么签名,我该如何调用它?

我通常使用action作为类型参数,调用时使用lambda:

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