我不能直接通過一個lambda拉姆達表達式是一個委託嗎?
form.Invoke(() => AMethod(form));
由於奇怪的拉姆達不是委託型(每編譯器錯誤)。我似乎記得Jon Skeet的.NET 4.0書中的不同信息。而就MSDN它說:
A lambda expression is an anonymous function that you can use to create delegates or expression tree types
public static void Main()
{
Form form = new Form();
form.Show();
form.Invoke(() => AMethod(form));
Application.Run();
Console.Read();
}
public static void AMethod(Form form)
{
form.SendToBack();
}
}
然而,在這裏,我們收到一個編譯器錯誤:
Cannot convert lambda expression to type 'System.Delegate' because it is not a delegate type.
拉姆達的應該是對匿名委託語法糖。那麼這裏的故事是什麼?我錯過了什麼?
BTW,除了下面的答案,隨意創建,它接受一個'Action'委託類型,反過來包裹'Form.Invoke'方法的擴展方法。這樣你就可以擁有上面的好語法,而不必每次都明確地施放/構造一個「Action」。 –
我相信我也有一種微妙之處。代表關鍵字和代表類型之間有區別。 –
'delegate'關鍵字定義了一個新的'MulticastDelegate'子類。例如:'Action:MulticastDelegate:Delegate:Object'。 'Delegate'大寫字母的類型是'System.Delegate'。只是爲了讓事情變得有趣,我們經常交換委託(關鍵字),委託(類型)和委託(概念):)儘管通常,如果您看到「委託」大寫,它是參考'System.Delegate'類型,但並非總是如此。 –