如果我有两个yield return
具有相同签名的方法,编译器似乎不会识别它们是相似的。
我有两种yield return
这样的方法:
public static IEnumerable<int> OddNumbers(int N)
{
for (int i = 0; i < N; i++)
if (i % 2 == 1) yield return i;
}
public static IEnumerable<int> EvenNumbers(int N)
{
for (int i = 0; i < N; i++)
if (i % 2 == 0) yield return i;
}
有了这个,我希望下面的语句编译得很好:
Func<int, IEnumerable<int>> generator = 1 == 0 ? EvenNumbers : OddNumbers; // Does not compile
我收到错误消息
无法确定条件表达式的类型,因为“方法组”和“方法组”之间没有隐式转换
但是,显式转换有效:
Func<int, IEnumerable<int>> newGen = 1 == 0 ? (Func<int, IEnumerable<int>>)EvenNumbers : (Func<int, IEnumerable<int>>)OddNumbers; // Works fine
我是否遗漏了什么或者这是 C# 编译器中的错误(我使用的是 VS2010SP1)?
注意:我已经阅读了这个并且仍然相信第一个应该编译得很好。
编辑:删除了var
代码片段中的使用,因为这不是我想要问的。