2017-04-04 14 views
0

我目前從C#開始,並希望使用匿名函數與字段(二維數組)進行交互。我想達到的應該看起來像這樣。c#anonymus作爲參數

//...somewhere in class 
private int[][] field1; 

interactWithElements(field1, { 
    x++; 
    //...more complex stuff 
}); 

private void interactWithElements(int[][] field, 
            Func anonymusFunction(int x)) { 
    for (int x = 0; x < field.Length; x++) { 
    for (int y = 0; y < field[0].Length; y++)) { 
     anonymusFunction(field[x][y]); 
    } 
    } 
} 

在c#中是這樣的可能嗎?如果是這樣,我該怎麼做? 也許與代表?

謝謝alredy。

+0

我認爲你的循環有一個小錯誤,你可能意味着'field [x] .Length'而不是'field [0] .Length' –

+0

在我的代碼中沒有任何區別該字段總是一個完美的矩形,否則其他代碼可能會發現問題;) –

+0

酷夠公平:) –

回答

0

你幾乎有:

//...somewhere in class 
private int[][] field1; 

interactWithElements(field1, x => { 
    x++; 
    //...more complex stuff 
}); 

您已經定義了什麼是有LAMDA表達x => { x++; },請參閱本guide關於它的信息。

其餘只需要正確的參數。

private void interactWithElements(
    int[][] field, 
    Action<int> anonymusFunction) 
{ 
    for (int x = 0; x < field.Length; x++) { 
    for (int y = 0; y < field[0].Length; y++)) { // <- you may have meant x instead of 0 
     anonymusFunction(field[x][y]); 
    } 
    } 
} 

如果要定義如果你感到快樂,返回你的東西看看Func<T, TResult>

,而無需返回一些東西inline函數然後使用Action<T>

作爲一個側面說明,你可以指定相當與這些代表很多輸入參數,但太多可以得到真正的困惑!