Если у меня есть два метода 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
Я получаю сообщение об ошибке
Тип условного выражения не может быть определен, потому что существует нет неявного преобразования между "группой методов" и "группой методов"
Тем не менее, явное действие cast:
Func<int, IEnumerable<int>> newGen = 1 == 0 ? (Func<int, IEnumerable<int>>)EvenNumbers : (Func<int, IEnumerable<int>>)OddNumbers; // Works fine
Мне ничего не хватает или это ошибка в компиляторе С# (я использую VS2010SP1)?
Примечание. Я прочитал this и по-прежнему считаю, что первый должен быть скомпилирован отлично.
EDIT: удалено использование var
в фрагментах кода, поскольку это не то, что я хотел спросить.