1) Вывод берется из неуниверсальной функции, поскольку она определена неявно (а универсальная функция определена явно).
2) IEnumerable<T>
наследуется от IEnumerable
, поэтому любой тип, наследуемый от IEnumerable<T>
, также должен реализовывать члены IEnumerable
3) Сделайте общее определение неявным, а неуниверсальное определение явным, например,
public class Class1 : IEnumerable<int>
{
public IEnumerator<int> GetEnumerator()
{
yield return 1;
yield return 2;
yield return 3;
yield return 4;
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
Обратите внимание, что универсальный перечислитель можно вернуть из неуниверсального метода, поскольку IEnumerator<T>
наследуется от IEnumerator
.