using System; using System.Collections.Generic; using System.Linq; using System.Reflection.PortableExecutable; using System.Text; using System.Threading.Tasks; namespace Airbus { internal class SetPlanesGeneric where T: class { //список объектов, которые храним private readonly List _places; //количество объектов в массиве public int Count => _places.Count; //ограничение по кол-ву объектов private readonly int _maxCount; //конструктор public SetPlanesGeneric(int count) { _maxCount = count; _places = new List(); } //добавление объекта в набор public int Insert(T plane) { if (Count + 1 <= _maxCount) return Insert(plane, 0); else return -1; } //добавление объекта в набор на конкретную позицию public int Insert(T plane, int position) { if (position >= _maxCount && position < 0) { return -1; } _places.Insert(position, plane); return position; } //удаление объекта из набора с конкретной позиции public T Remove(int position) { if (position < _maxCount && position >= 0) { if (_places.ElementAt(position) != null) { T result = _places.ElementAt(position); _places.RemoveAt(position); return result; } return null; } return null; } //получение объекта из набора по позиции public T this[int position] { get { if (position >= _places.Count || position < 0) { return null; } else if (_places[position] == null) { return null; } return _places[position]; } set { if (position < _maxCount && position >= 0) { Insert(this[position], position); } } } //проход по набору до первого пустого public IEnumerable GetAirbus() { foreach(var plane in _places) { if(plane != null) { yield return plane; } else { yield break; } } } } }