为什么泛型类型推断在这种情况下不起作用?

Tho*_*que 11 c# linq type-inference

尝试在LINQPad中编译以下代码时:

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

static string GetProviderName(DriveInfo drive)
{
    // some irrelevant WMI code...
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

无法从用法推断出方法'System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable,System.Func)'的类型参数.尝试显式指定类型参数.

如果我使用lambda d => GetProviderName(d)而不是方法组,它工作正常...我很惊讶,因为我确信编译器能够从方法组推断出类型.GetProviderName范围内没有其他方法,输入和输出类型是明确定义的,因此它应该可以隐式转换为Func<DriveInfo, string>......不应该吗?

SLa*_*aks 8

这是在C#4.0中修复的编译器的限制