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

  • MagicofRahat

    MagicofRahat

    13 Temmuz 2007
  • Moodle

    Moodle

    11 Mayıs 2010
  • Blu animations and other videos

    Blu animatio

    15 HAZİRAN 2007