Если у меня есть два 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
в фрагментах кода, поскольку это было не то, что я хотел спросить.