2013-04-30 27 views
52

Func'i doğrudan Invoke() kullanarak çağırmak arasındaki farkları merak ediyorum. Bir fark var mı ? İlk, sözdizimsel şeker ve Invoke() 'u çağırıyor mu?Func <T>() vs Func <T> .Invoke()

public T DoWork<T>(Func<T> method) 
{ 
    return (T)method.Invoke(); 
} 

public T DoWork<T>(Func<T> method) 
{ 
    return (T)method(); 
} 

vs Ya da tamamen yanlış yolda :) Teşekkürler duyuyorum.

+0

http://social.msdn.microsoft.com/Forums/en- yapabilirsiniz ABD/csharplanguage/thread/f629c34d-6523-433a-90b3-bb5d445c5587 –

cevap

67

Hiç bir fark yok. İkincisi, derleyici tarafından sağlanan Invoke için bir kısa yoldur. Aynı IL'ye derlerler.

çağırır yeni C# 6 sıfır yayılma operatörü ile iyi çalışır
+0

Teşekkürler, Jon. Durumun böyle olduğunu düşündüm. – Tris

+0

Invoke() yönteminin kapatılması, derleyici hatasının ortaya çıkmasıyla sonuçlanır: "System.Func 'türünün" T "ye dolaylı olarak dönüştürülemiyor. .NET 4'e karşı derleme yapıyorum. – Mike

+1

@Mike: Bu, * köşeli ayraçları * da kaçırmış olsaydınız, yani '(T) yöntemi()' yerine '(T) yöntemini 'döndürmeye çalıştıysanız olur. –

2

, şimdi u

T result = method?.Invoke(); 

yerine

T result = method != null ? method() : null; 
+0

Bunun kullanışlı olduğu bir senaryoyu örnekleyebilir misiniz? Ders kitabı davası olayları artırıyor. – Gusdor