Ошибка в логике реализации методов интерфейсов IEnumerator, IEnumerable - C#
Формулировка задачи:
Здраствуйте. Програмирую на С# недавно. На данный момент изучаю книгу "C# и платформа .NET" от Эндрю Троелсен'а. Питер 2006.
В конце 4-й главы "Интерфейсы и Коллекции" после освоения теоретической части, приступив к практическому усвайванию, встретил не большое затруднение в логике метода интерфейса.
Значение переменной
"Индекс находился вне границ массива."
public object Current { get { return carArray[pos]; } }
pos = 3
, аcarArray.Length = 4
. Переменная pos всё равно увеличивается на 1. и происходит обшибка, потомучто позиции 4 в массиве объектов не существует. Объект указываеь на не существующий индекс в фиксированном массиве объектов типаCar
carArray = new Car[4];
carArray[4] = ??????????? Как изменить логику методаMoveNext()
чтобы не возникало подобной ошибки?public class Cars : IEnumerator, IEnumerable { private Car[] carArray; int pos = -1; public Cars() { carArray = new Car[4]; carArray[0] = new Car("alfa", 100, 220, true); carArray[1] = new Car("wolts", 100, 220, true); carArray[2] = new Car("bmw", 100, 220, true); carArray[3] = new Car("mercedes", 100, 220, true); } public bool MoveNext() { if (pos < carArray.Length) { pos++; return true; } else return false; } public void Reset() { pos = 0; } public object Current { get { return carArray[pos]; } } public IEnumerator GetEnumerator() { return (IEnumerator)this; } }
class Program { [DllImport("msvcrt")] extern static int _getch(); static void Main(string[] args) { Cars carLot = new Cars(); foreach (Car c in carLot) { Console.WriteLine(c.PetName); } _getch(); } }
Решение задачи: «Ошибка в логике реализации методов интерфейсов IEnumerator, IEnumerable»
textual
Листинг программы
if (pos < carArray.Length - 1)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д