Перейдите в gradle и найдите targetSdkVersion = 25 . Измените его, чтобы использовать Android targetSdkVersion = 26
IEnumerable является интерфейсом, который определяет один метод GetEnumerator, который возвращается интерфейс IEnumerator, это в свою очередь предоставляет доступ только для чтения к набору. Набор, который реализует IEnumerable, может использоваться с foreach оператором.
пример кода Определения
IEnumerable
public IEnumerator GetEnumerator();
IEnumerator
public object Current;
public void Reset();
public bool MoveNext();
IEnumerator
вещь, которая может перечислить: это имеет Current
свойство и MoveNext
и Reset
методы (которые в.NET кодируют Вас, вероятно, не будет звонить явно, хотя Вы могли).
IEnumerable
вещь, которая может быть перечислена..., который просто означает, что она имеет метод GetEnumerator, который возвращается IEnumerator
.
, Который Вы используете? Единственная причина использовать IEnumerator
состоит в том, если у Вас есть что-то, что имеет нестандартный способ перечислить (то есть, возврата его различных элементов один за другим), и необходимо определить, как это работает. Вы создали бы новый класс, реализовав IEnumerator
. Но необходимо было бы все еще возвратить это IEnumerator
в IEnumerable
класс.
Для взгляда на то, на что похож перечислитель (реализующий IEnumerator<T>
), посмотрите любой Enumerator<T>
класс, такой как те содержавшиеся в [1 112], Queue<T>,
или Stack<T>
. Для взгляда на класс, реализовывая IEnumerable
, посмотрите любой стандартный класс набора.
Enumerator
шоу Вы объекты в списке или наборе. Каждый экземпляр Перечислителя в определенном положении (1-й элемент, 7-й элемент, и т.д.) и может дать Вам, что элемент (IEnumerator.Current
) или перемещается в следующий (IEnumerator.MoveNext
). Когда Вы пишете foreach
цикл в C#, компилятор генерирует код, который использует Перечислитель.
Enumerable
класс, который может дать Вам Enumerator
с. Это имеет метод, названный GetEnumerator
, который дает Вам Enumerator
, который смотрит на его объекты. Когда Вы пишете foreach
цикл в C#, код, который он генерирует вызовы GetEnumerator
для создания эти Enumerator
используемый циклом.
IEnumerable
и IEnumerator
оба интерфейсы. IEnumerable
имеет всего один метод, названный GetEnumerator
. Эти возвраты метода (поскольку все методы возвращают что-то включая пустоту), другой тип, который является интерфейсом и что интерфейс IEnumerator
. При реализации логики перечислителя в любом классе набора Вы реализуете IEnumerable
(или универсальный или не универсальные). IEnumerable
имеет всего один метод, тогда как IEnumerator
имеет 2 метода (MoveNext
и Reset
) и свойство Current
. Поскольку легкое понимание рассматривает IEnumerable
как поле, которое содержит IEnumerator
внутренняя часть оно (хотя не посредством наследования или включения). Посмотрите код для лучшего понимания:
class Test : IEnumerable, IEnumerator
{
IEnumerator IEnumerable.GetEnumerator()
{
throw new NotImplementedException();
}
public object Current
{
get { throw new NotImplementedException(); }
}
public bool MoveNext()
{
throw new NotImplementedException();
}
public void Reset()
{
throw new NotImplementedException();
}
}