2011-06-19 22 views
5

Ben .NET 3,0Güncelleme kontrolü 2.0

Action xx =() => button1.Text = "hello world"; 
this.Invoke(xx); 

ile bu kodu kullanıyorum ama .NET 2.0 bunu denedik, ben Eylem böyle parametreyi yazın sahiptir düşünüyorum:

Action<T> 

.NET 2.0'da ilk kod nasıl uygulanır?

cevap

6

bu deneyin:

this.Invoke((MethodInvoker) delegate 
{ 
    button1.Text = "hello world"; 
}); 

Action rağmen .NET 2.0 tanıtıldı, sen .NET 2.0 lambda İfade () => ... sözdizimi kullanamazsınız. Eğer lambda sytax yok gibi

BTW, hala sürece, .NET 2.0 Action kullanabilirsiniz:

Action action = delegate { button1.Text = "hello world"; }; 
Invoke(action); 
+0

bu bir eser .. ama aligray'ın cevabı, neden bu hatayı aldım .. Anonim bir yöntemi 'System.Delegate' türüne dönüştüremiyorum çünkü bir delege türü değil .. sanırım, hala aynı.. –

1

Action<T> sadece yöntem eylem tarafından temsil anlamına gelir imzası vardır mutlaka tek bir parametre al. Parametrenin türü nedir, Invoke çağrısının imzasına bağlıdır. Action çeşitli imzaları temsil etmek nasıl

Bazı kod örnekleri:

var noArgs =() => button1.Text = "hello world"; // Action 
var oneArg = (arg) => button1.Text = "hello world"; // Action<T> 
var twoArgs = (arg1, arg2) => button1.Text = "hello world"; // Action<T,T> 

Eğer yönteme parametreleri kullanmak gerekmiyorsa, bu iyi. Ama yine de onları lambda ifadesinde ilan etmeniz gerekiyor.

Şimdi, bu, .NET 2.0'den nasıl yapılacağını yanıtlamıyor, ancak lambda'nın Action türlerine nasıl karşılık geldiğini bilmediğinizi (yanlışsa, yanlışsa, beni düzeltmem) varsaydım.