2015-05-13 45 views
2

嘿,我知道有很多问题已经包含我需要的答案,但我很难在Func/Action/Delegate/Lambda之间进行筛选,并且作为一个JavaScript人员感觉不必要的复杂。C#麻烦传递内联代码

我正在使用2d数组,并且希望编写一个接受int width,int height和任何形式的内联代码的方法,以便用每个x/y对调用。重点在于避免一遍又一遍地编写嵌套for循环的错误和时间。但我不确定使用的内联代码的类型,或者看起来像什么。我尝试了一堆连击,但无法完成。

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

+0

你所说的 “每x/y对” 是什么意思?宽度和高度?或者数组的元素? –

+0

请向我们展示您的2D阵列的定义。 –

+0

是的。我使用x和y来表示for循环中的迭代变量。最终重点是“thePassedInlineCode(x,y)” – Weavermount

回答

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

虽然有很多方法可以做到这一点,最简单的一个,最好的方法是定义一个委托和接受,作为论据。

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