Ошибка в логике реализации методов интерфейсов 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)