我閱讀有關匿名方法,我試圖環繞這個例子中我的頭:爲什麼這個委託語法是「合法的」?
List<int> evenNumbers = list.FindAll(delegate(int i)
{ return (i % 2) == 0; })
爲什麼是delegate(int i)
合法的嗎?您不必聲明new delegate void
或類似的東西。
這是匿名方法的意思嗎?這是允許匿名方法的附加語法糖嗎?
我閱讀有關匿名方法,我試圖環繞這個例子中我的頭:爲什麼這個委託語法是「合法的」?
List<int> evenNumbers = list.FindAll(delegate(int i)
{ return (i % 2) == 0; })
爲什麼是delegate(int i)
合法的嗎?您不必聲明new delegate void
或類似的東西。
這是匿名方法的意思嗎?這是允許匿名方法的附加語法糖嗎?
由於您懷疑您正在創建一個匿名委託/方法,因此是合法的。
一種替代(使用lambda operator =>)將是:
List<int> evenNumbers = list.FindAll((i) => ((i % 2) == 0));
或
List<int> evenNumbers = list.FindAll(i => i % 2 == 0);
進一步閱讀參見Lambda Expressions。
在這段代碼中,它似乎將一個方法傳遞給使用委託的方法。
如果您稍微分解一下該語句,希望它會更加明顯 - 這是等效代碼。
Predicate<int> test = delegate(int i)
{
return (i % 2) == 0;
};
List<int> evenNumbers = list.FindAll(test);
正如你可以看到它創建了一個匿名委託(編譯器將轉入幕後的方法)
我個人一直認爲的「內聯」匿名委託語法模糊焦點超過加清晰,而相同的結構使用lambda表達式,一旦你習慣的語法建成,增加了透明度
List<int> evenNumbers = list.FindAll(i => i % 2 == 0);
自從你開始學習匿名方法,你應該看看'拉姆達expressions'如果您還沒有。我想你可能會覺得它們很有趣。 – Poma
@波馬:謝謝!我接下來就是這樣! :-) – richard