2010-05-26 156 views
11

當試圖編譯LINQPad下面的代碼:爲什麼泛型類型推斷在這種情況下不起作用?

void Main() 
{ 
    DriveInfo.GetDrives().Select(GetProviderName).Dump(); 
} 

static string GetProviderName(DriveInfo drive) 
{ 
    // some irrelevant WMI code... 
} 

我得到以下錯誤:

的類型參數的方法「System.Linq.Enumerable.Select(System.Collections.Generic .IEnumerable,System.Func)'不能從這個用法推斷出來。嘗試明確指定類型參數。

如果我使用像d => GetProviderName(d)而不是方法組的λ,它工作正常...我很驚訝,因爲我確信,編譯器將能夠推斷方法組的類型。在範圍內沒有其他GetProviderName方法,並且輸入和輸出類型被明確定義,所以它應該可以隱式轉換爲Func<DriveInfo, string> ...不應該嗎?

回答

8

這是在固定在C#4.0

+0

阿編譯器的限制,我知道* *我已經看到它之前的工作...上面做在C#3.0的測試。你有什麼參考鏈接? – 2010-05-26 14:19:52

+0

http://togaroga.com/2009/11/smarter-type-in​​ference-with-c-4/ – SLaks 2010-05-26 14:26:11

+0

就是我正在尋找的......謝謝! – 2010-05-26 14:33:53

相關問題