diff --git a/ProjectLiner/ProjectLiner/CollectionGenericObjects/CollectionType.cs b/ProjectLiner/ProjectLiner/CollectionGenericObjects/CollectionType.cs
new file mode 100644
index 0000000..2dd3c4d
--- /dev/null
+++ b/ProjectLiner/ProjectLiner/CollectionGenericObjects/CollectionType.cs
@@ -0,0 +1,19 @@
+namespace ProjectLiner.CollectionGenericObjects;
+///
+/// Тип коллекции
+///
+public enum CollectionType
+{
+ ///
+ /// Неопределено
+ ///
+ None = 0,
+ ///
+ /// Массив
+ ///
+ Massive = 1,
+ ///
+ /// Список
+ ///
+ List = 2
+}
\ No newline at end of file
diff --git a/ProjectLiner/ProjectLiner/CollectionGenericObjects/ListGenericObjects.cs b/ProjectLiner/ProjectLiner/CollectionGenericObjects/ListGenericObjects.cs
new file mode 100644
index 0000000..5ae5fe2
--- /dev/null
+++ b/ProjectLiner/ProjectLiner/CollectionGenericObjects/ListGenericObjects.cs
@@ -0,0 +1,56 @@
+namespace ProjectLiner.CollectionGenericObjects;
+
+public class ListGenericObjects : ICollectionGenericObjects
+ where T : class
+{
+ ///
+ /// Список объектов, которые храним
+ ///
+ private readonly List _collection;
+ ///
+ /// Максимально допустимое число объектов в списке
+ ///
+ private int _maxCount;
+ public int Count => _collection.Count;
+ public int SetMaxCount { set { if (value > 0) { _maxCount = value; } } }
+ ///
+ /// Конструктор
+ ///
+ public ListGenericObjects()
+ {
+ _collection = new();
+ }
+ public T? Get(int position)
+ {
+ // TODO проверка позиции
+ if (position >= Count || position < 0) return null;
+ return _collection[position];
+ }
+ public bool Insert(T obj)
+ {
+ // TODO проверка, что не превышено максимальное количество элементов
+ // TODO вставка в конец набора
+ if (Count == _maxCount) return false;
+ _collection.Add(obj);
+ return true;//возможна проблема
+ }
+ public bool Insert(T obj, int position)
+ {
+ // TODO проверка, что не превышено максимальное количество элементов
+ // TODO проверка позиции
+ // TODO вставка по позиции
+ if (Count == _maxCount) return false;
+ if (position >= Count || position < 0) return false;
+ _collection.Insert(position, obj);
+ return true;
+ }
+ public bool Remove(int position)
+ {
+ // TODO проверка позиции
+ // TODO удаление объекта из списка
+ if (position >= Count || position < 0) return false;
+ T obj = _collection[position];
+ _collection.RemoveAt(position);
+ return true;
+ }
+}
diff --git a/ProjectLiner/ProjectLiner/CollectionGenericObjects/StorageCollection.cs b/ProjectLiner/ProjectLiner/CollectionGenericObjects/StorageCollection.cs
new file mode 100644
index 0000000..db2a9dc
--- /dev/null
+++ b/ProjectLiner/ProjectLiner/CollectionGenericObjects/StorageCollection.cs
@@ -0,0 +1,72 @@
+namespace ProjectLiner.CollectionGenericObjects;
+///
+/// Класс-хранилище коллекций
+///
+///
+public class StorageCollection
+where T : class
+{
+ ///
+ /// Словарь (хранилище) с коллекциями
+ ///
+ readonly Dictionary> _storages;
+ ///
+ /// Возвращение списка названий коллекций
+ ///
+ public List Keys => _storages.Keys.ToList();
+ ///
+ /// Конструктор
+ ///
+ public StorageCollection()
+ {
+ _storages = new Dictionary>();
+ }
+ ///
+ /// Добавление коллекции в хранилище
+ ///
+ /// Название коллекции
+ /// тип коллекции
+ public void AddCollection(string name, CollectionType collectionType)
+ {
+ // TODO проверка, что name не пустой и нет в словаре записи с таким ключом
+ // TODO Прописать логику для добавления
+ if(name == "")
+ throw new ArgumentException("name missing");
+ if (_storages.ContainsKey(name))
+ throw new ArgumentException("this name already use");
+ switch(collectionType)
+ {
+ case CollectionType.None:
+ throw new ArgumentException("CollectionType is None");
+ case CollectionType.Massive:
+ _storages.Add(name, new MassiveGenericObjects());
+ break;
+ case CollectionType.List:
+ _storages.Add(name, new ListGenericObjects());
+ break;
+ }
+}
+ ///
+ /// Удаление коллекции
+ ///
+ /// Название коллекции
+ public void DelCollection(string name)
+ {
+ if (_storages.ContainsKey(name))
+ _storages.Remove(name);
+ }
+ ///
+ /// Доступ к коллекции
+ ///
+ /// Название коллекции
+ ///
+ public ICollectionGenericObjects? this[string name]
+ {
+ get
+ {
+ if(_storages.ContainsKey(name))
+ return _storages[name];
+ return null;
+ }
+ }
+}
\ No newline at end of file