2013-07-30 58 views
4

我在編程C#5.0中閱讀了以下示例。當它不返回IDisposable時,爲什麼可以將此lambda表達式轉換爲Func<IObserver<char>, IDisposable>將lambda表達式轉換爲Func <IObserver <char>,IDisposable>

IObservable<char> singularHotSource = Observable.Create(
    (Func<IObserver<char>, IDisposable>)(obs => 
    { 
     while (true) 
     { 
      obs.OnNext(Console.ReadKey(true).KeyChar); 
     } 
    })); 
+0

我想說這是因爲循環是無限的,所以返回值不會被達到。如果你使循環非無限,你會得到一個編譯時錯誤。但是*爲什麼*它是這樣實現的?對於Eric Lippert來說這更像是一個問題。 –

回答

3

由於@Patryk筆記,這是基本上一樣問:「這是爲什麼不許說,它返回int,當它不?」:

int SomeMethod() 
    { 
     while (true) { } 
    } 

而且通過回答;它不會在任何代碼路徑中返回不同的(另一種類型或void) - 確定,爲什麼不;編譯器可以將其表示爲返回int的方法。

相關問題