C#. Классы, как реализовать метод добавления/удаления ноутбука в массив?

Всем привет! Помогите пожалуйста разобраться. У меня класс Laptop и есть класс Shop, в котором есть поле Laptop[] _arr. Не пойму, как реализовать метод добавления/удаления ноутбука в массив. Я попытался сделать через список, но при выводе на экран пустота.

Использовать List<Laptop> вместо массива.

Предположим, есть некоторый интернет-магазин, который
занимается реализацией ноутбуков. У нас есть классы Shop и
Laptop. У класса Laptop переопределить метод ToString(), чтобы он
возвращал информацию о ноутбуке. В классе Shop должен
храниться массив объектов Laptop. Нужно сделать возможным
обращение к элементам этого массива через экземпляр класса
Shop, пользуясь синтаксисом массива так, словно класс Shop и есть
массив элементов типа Laptop. Добавьте необходимый индексатор,
а также необходимые конструкторы для работы.

Вот условие, мне кажется, что тут нельзя использовать список. Вроде написано массив. В том то и проблема

Наверное, надо отталкиваться от

Может тут и не надо менять, просто передать в конструктор и всё.

Ну или если надо, то создавать новый массив как в аналогичных предыдущих задачах по С++, оно даже старые элементы само скопирует (только при удалении не из конца придется самому копировать). https://docs.microsoft.com/en-us/dotnet/api/system.array.resize

1 лайк

С первой частью разобрался вроде, но хотел спросить, почему, если я делаю так:

Shop a = new Shop(10) { Title = "MyShop" };
            Console.WriteLine(a.Title);
            a.AddLaptop(new Laptop("Acer", 550, "AMD", 8));
            a.AddLaptop(new Laptop("MacBook", 1200, "Intel", 16));
            a.AddLaptop(new Laptop("Asus", 500, "Intel", 4));
            a.AddLaptop(new Laptop("Asus", 700, "Intel", 8));
            a.AddLaptop(new Laptop("Dell", 800, "Intel", 8));
            a.AddLaptop(new Laptop("Asus", 500, "Intel", 8));
            a.AddLaptop(new Laptop("Asus", 500, "Intel", 8));
            a.AddLaptop(new Laptop("Asus", 500, "Intel", 8));
            a.AddLaptop(new Laptop("Asus", 500, "Intel", 8));
            a.AddLaptop(new Laptop("Asus", 500, "Intel", 8));
            a.AddLaptop(new Laptop("Asus", 500, "Intel", 8));
            foreach (var laptop in a)
            {
                Console.WriteLine(laptop.ToString());
            }

то все нормально выводится, а если сначала создаю объект класса Laptop, а потом его добавляю, то ничего не выводится?

Вряд ли в этом дело.

Думал что все хорошо, но сделал еще одну проверку и понял, что не то. Если я пытаюсь добавлять после удаления программа вылетает. Вот мои методы добавления/удаления:

public void AddLaptop(Laptop value)
        {
            if (size == 0)
                _arr = new Laptop[1];
            else
            {
                Laptop[] tmp = new Laptop[_arr.Length + 1];
                for (int i = 0; i < size; ++i)
                {
                    tmp[i] = _arr[i];
                }
                _arr = tmp;
            }
            _arr[size] = value;
            size++;
        }
        public void DelLaptop(int pos)
        {
            Laptop[] newArr = new Laptop[_arr.Length - 1];
            for (int i = 0; i < pos; i++)
            {
                newArr[i] = _arr[i];
            }
            for (int i = pos; i < newArr.Length; i++)
            {
                newArr[i] = _arr[i + 1];
            }
            _arr = newArr;
        }

Объясните, что не так пожалуйста?

Уже нашел в чем дело. Надо было просто сюда написать наверно :grin: :grin:

Это называется метод утенка :rubberduck2:

В Add можно не копировать самому.

If newSize is greater than the Length of the old array, a new array is allocated and all the elements are copied from the old array to the new one. If newSize is less than the Length of the old array, a new array is allocated and elements are copied from the old array to the new one until the new one is filled; the rest of the elements in the old array are ignored. If newSize is equal to the Length of the old array, this method does nothing.

… но думаю тут все-таки вообще не нужно добавление и удаление.

потому что цель же сделать

а в массиве нет такого.

Ну и это явно намекает

1 лайк

2 сообщения было перенесено в новую тему: SQL, Вывести имена преподавателей в следующем порядке