【问题标题】:C# trouble passing inline codeC# 传递内联代码时遇到问题
【发布时间】:2015-05-14 08:10:18
【问题描述】:

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

我正在使用 2d 数组,并想编写一个方法,该方法接受 int 宽度、int 高度和任何形式的内联代码,每个 x/y 对都将调用该方法。关键是为了避免一遍又一遍地编写嵌套 for 循环的错误和时间。但是我不确定要使用的正确类型的内联代码,或者它的样子。我已经尝试了一堆组合,但无法成功。

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

【问题讨论】:

  • 请告诉我们你的二维数组的定义。
  • 是的。我使用 x 和 y 来表示 for 循环中的迭代变量。最终的重点是调用“ thePassedInlineCode(x,y) ”
  • 我有不同的二维数据表示。这是我想要一种方法来简单地生成每个整数坐标并将它们传递给特定代码的主要原因
  • 我真正的问题是选择正确的内联代码,并在方法签名中使用它,然后调用它

标签: c# multidimensional-array inline-code


【解决方案1】:

我通常使用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);
        }
    }
}

【讨论】:

    【解决方案2】:

    虽然有很多方法可以做到这一点,但最简单和最好的方法之一是定义一个委托并将其作为参数接受。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 2011-04-05
      • 2019-12-22
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      相关资源
      最近更新 更多