尝试在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)
这样的lambda而不是方法组,它运行正常...我很惊讶,因为我确信编译器能够从方法组中推断出类型。范围内没有其他GetProviderName
方法,输入和输出类型已明确定义,因此它应隐式转换为Func<DriveInfo, string>
...不应该吗?
答案 0 :(得分:8)
这是在C#4.0中修复的编译器的限制