2014-07-18 29 views
-4

我編寫了大量的語言:JavaPHPC#JQuery僅舉幾個,但我只公平在C#中產中等和我很困惑,如何使用匿名函數。我見過多次提到Action<T>lambdadelegates,但我不知道它們是什麼,他們怎麼回事:我感到困惑在C#中可選的匿名函數

我(但)很習慣將jQuery這確實是這樣的:

function hello(fnc){ 
    console.log("Hello"); 
    if (typeof fnc === "function") fnc(); 
} 
hello();          //prints "Hello" 
hello(function() {console.log("World"); }); //prints "Hello\nWorld" 

現在,我用這個作爲一個例子:我該怎麼做,這是C#我也很好奇,會發生什麼情況classes EG:

class foo 
{ 
    public void action() 
    { 
     Debug.WriteLine("Hello"); 
    } 

    public void action(Delegate fnc) 
    { 
     action(); 
     control.Invoke((MethodInvoker)fnc); 
    } 

} 
foo FOO = new foo(); 
FOO.action();       //prints "Hello" 
FOO.action(() => {     //prints "Hello\nWorld" 
    Debug.WriteLine("World"); 
}); 

所以我的問題是:a)這是否工作/ AM I C失去(我不能檢查我不在工作電腦atm)和b)如何傳遞參數(即一個範圍問題):

foo FOO = new foo(); 
string yay = "Yeah"; 
FOO.action(() => {     //prints "Hello\nWorldYeah" 
    Debug.WriteLine("World" + yay); 
}); 

編輯

a screen shot of it erroring

+0

-1叫它

foo FOO = new foo(); FOO.action(); //prints "Hello" FOO.action((Action)(() => { //prints "Hello\nWorld" Debug.WriteLine("World"); })); string yay = "Yeah"; FOO.action((Action)(() => { //prints "Hello\nWorldYeah" - this will indeed still print "Yeah" Debug.WriteLine("World" + yay); })); 

?爲什麼....... – user26676

+1

@eddie_cat不確定你的意思?你在問我爲什麼寫了高度全面的僞代碼這個問題?如果是這樣,我會關心和注意,因爲我想知道如何形成它。很好的回答tho – user26676

+0

我想你已經來到了錯誤的網站eddie謝謝你的答案,他們很感激,但我想這個問題得到一些真實的答案,你有一個糟糕的一天嗎?我一直在努力嘗試它,我花了幾個小時嘗試任何方式..一些如何顯示你眼中缺乏研究? – user26676

回答

2

儘管從SO自封的警察缺乏幫助(誰留錯了,誰寧願懲罰問題需要答案,而不是給出答案)我沒有從他們幫助固定它自己..所以後人在這裏是如何做到這一點

class foo 
{ 
    public void action() 
    { 
     Debug.WriteLine("Hello"); 
    } 

    public void action(Action fnc) 
    { 
     action(); 
     fnc(); 
    } 
} 

和使用這種技術,您可以發送匿名回調函數的C#方法

+0

如果你發佈了一個答案,你可能有時間和地點說 – user26676

+0

我也可以說在評論中不需要發佈答案,因爲它不是問題的答案,它只是添加不必要的代碼從問題中的代碼到沒有生產性原因的答案。事實上,由於這個問題甚至不是問題*它不屬於答案*。由於這只是您的答案的問題,因此它屬於您對答案的評論。 – Servy