using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace lab1.CollectionGenericObjects; /// /// Параметрический набор объектов /// /// Параметр: ограничение - ссылочный тип public class ListGenericObjects : ICollectionGenericObjects where T : class { /// /// Список объектов, которые храним /// private readonly List _collection; /// /// Максимально допустимое значение числа объектов в списке /// private int _maxCount; public int Count => _collection.Count; public int MaxCount { get { return Count; } set { if (value > 0) { _maxCount = value; } } } public CollectionType GetCollectionType => CollectionType.List; public int SetMaxCount { set => throw new NotImplementedException(); } int ICollectionGenericObjects.SetMaxCount { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } /// /// Конструктор /// public ListGenericObjects() { _collection = new(); } public T? Get(int position) { if (position >= 0 && position < _collection.Count) { return _collection[position]; } return null; } public int Insert(T obj) { // TODO проверка, что не превышено максимальное количество элементов // TODO вставка в конец набора if (_collection.Count <= _maxCount) { _collection.Add(obj); return _collection.Count; } return -1; } public int Insert(T obj, int position) { // TODO проверка, что не превышено максимальное количество элементов // TODO проверка позиции // TODO вставка по позиции if (position >= 0 && position < _maxCount && _collection.Count <= _maxCount) { _collection.Insert(position, obj); return position; } return -1; } public T? Remove(int position) { // TODO проверка позиции // TODO удаление объекта из списка if (position < 0 || position > _maxCount) { return null; } T temp = _collection[position]; _collection.RemoveAt(position); return temp; } public IEnumerable GetItems() { for (int i = 0; i < Count; ++i) { yield return _collection[i]; } } }