SORU
4 Ocak 2009, Pazar


Neden lambda expression düz bir Temsilci parametre olarak verilen zaman dönüştürmelisiniz

Yöntem Sistemi.Windows.Formlar.Kontrol.Çağırmak(Temsilci yöntem)

Neden böyle bir derleme zamanı hatası verir:

string str = "woop";
Invoke(() => this.Text = str);
// Error: Cannot convert lambda expression to type 'System.Delegate'
// because it is not a delegate type

Henüz bu gayet iyi çalışıyor:

string str = "woop";
Invoke((Action)(() => this.Text = str));

Bu yöntem düz bir Temsilci bekler?

CEVAP
4 Ocak 2009, Pazar


Lambda ifade ya da bir temsilci ya da bir ifade ağacı dönüştürülebilir - ama bilmek zorundadırhangitür temsilci. Sadece imza bilmek yeterli değildir. Örneğin, ben varsayalım:

public delegate void Action1();
public delegate void Action2();

...

Delegate x = () => Console.WriteLine("hi");

Nesnenin x için sevk beton türü ne beklenir ki? Evet, derleyiciolabiliruygun bir imza ile yeni bir temsilci türü oluşturur, ancak bu nadiren işe yarar ve hata kontrolü için daha az fırsat.

Eğer kolay Action Control.Invoke arama yapmak istiyorsanız, bu o kadar kolay bir şey Kontrol etmek için bir uzantısı yöntemi ekleyin:

public static void Invoke(this Control control, Action action)
{
    control.Invoke((Delegate) action);
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Excel Video Tutorials

    Excel Video

    6 Aralık 2012
  • Felice Musique

    Felice Musiq

    22 NİSAN 2014
  • Microsoft Help & Training Videos

    Microsoft He

    31 Mart 2009