Если у меня есть два метода 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
Я что-то упустил или это ошибка в компиляторе С# (я использую VS2010SP1)?
Примечание. Я прочитал это и по-прежнему считаю, что первый должен скомпилировано нормально.
РЕДАКТИРОВАТЬ: Удалено использование var
в фрагментах кода, поскольку я не собирался спрашивать об этом.
var
- person Jodrell   schedule 22.07.2011