Вопрос о IENUMERATOR.GETENUMERATOR в C #
-
03-10-2019 - |
Вопрос
У меня есть вопрос о IEnumerator.GetEnumerator()
метод.
public class NodeFull
{
public enum Base : byte {A = 0, C, G, U };
private int taxID;
private List<int> children;
public int TaxID
{
get { return taxID; }
set { taxID = value; }
}
public int this[int i]
{
get { return children[i]; }
set { children[i] = value; }
}
public IEnumerator GetEnumerator()
{
return (children as IEnumerator).GetEnumerator();
}
public TaxNodeFull(int taxID)
{
this.taxID = taxID;
this.children = new List<int>(3);
}
}
Когда я пытаюсь компилировать, сообщение об ошибке говорит
«System.Collections.ienumerator» не содержит определения для «getEnumerator», и не может быть обнаружен метод расширения «Getenumerator», принимающий первый аргумент типа «System.Collections. ?)
Есть ли что-то не так с кодом?
заранее спасибо
Спасибо вам, ребята. Я понял.
Решение
Это IEnumerable.GetEnumerator()
(или IEnumerable<T>.GetEnumerator()
), нет IEnumerator.GetEnumerator()
. Отказ Члены IEnumerator
являются MoveNext()
, Current
а также Reset()
(а также Dispose
для общей версии). То IEnumerable
это «что-то, что можно итерацию» (например, список) и IEnumerator
Представляет текущее состояние в пределах этой итерации - как курсор базы данных.
Немного странно, что ваш класс не реализует IEnumerable
или IEnumerable<T>
сам. Я ожидал чего-то вроде этого:
class NodeFull : IEnumerable<int>
{
... other stuff as normal ...
public IEnumerator<int> GetEnumerator()
{
return children.GetEnumerator();
}
// Use explicit interface implementation as there's a naming
// clash. This is a standard pattern for implementing IEnumerable<T>.
IEnumerator IEnumerable.GetEnumerator()
{
// Defer to generic version
return GetEnumerator();
}
}
Другие советы
дети List<int>
, который реализует IEnumerable<int>
а также IEnumerable
. Отказ То GetEnumerator()
Метод определен для тех интерфейсов, а не для IEnumerator
.
children as IEnumerator
должен привести к нуле.
Здесь нет GetEnumerator()
Метод на Иенумератор интерфейс. Вы пытаетесь использовать Ienumerable Интерфейс возможно?