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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы