如果将无参数方法组传递给LINQ方法,为什么无法推断类型?

Tim*_*ter -1 c# linq

有人可以解释我(或显示规范/文档)为什么不允许以下内容:

string[] fiveFoos = Enumerable.Range(1, 5).Select(GetFoo).ToArray();
Run Code Online (Sandbox Code Playgroud)

...

static string GetFoo()
{
    return "Foo";
}
Run Code Online (Sandbox Code Playgroud)

只有这将编译:

string[] fiveFoos = Enumerable.Range(1, 5).Select(i => GetFoo()).ToArray();
Run Code Online (Sandbox Code Playgroud)

从中投射的整数Enumerable.Range是不相关的,并且该方法GetFoo是无参数的并且清楚地返回String,所以为什么我仍然会得到以下编译器错误:

错误CS0411无法从用法中推断出方法'Enumerable.Select(IEnumerable,Func)'的类型参数.尝试显式指定类型参数.

thi*_*hat 7

Select这里需要一个Func<int, string>- 你的GetFoo方法需要采取int这个工作.

方法组转换通过推断采用适当参数的方法的重载来工作 - 这里没有一个.The integer projected from Enumerable.Range is not relevant - 在这个用例中,它可能与您无关,但它与编译器有关!