From 5c91dc45fd82bf454ad6dd8c3098dbb6a99d9764 Mon Sep 17 00:00:00 2001 From: ENDORFIT Date: Mon, 22 Apr 2024 13:33:00 +0400 Subject: [PATCH] Not Done --- ProjectMonorail/Configs/nlog.config | 13 ++ ProjectMonorail/FormMonorailCollection.cs | 196 +++++++++++------- ProjectMonorail/Program.cs | 29 ++- ProjectMonorail/ProjectMonorail.csproj | 9 + .../Exceptions/CollectionOverflowException.cs | 17 ++ .../Exceptions/ObjectNotFoundException.cs | 17 ++ .../PositionOutOfCollectionException.cs | 17 ++ .../AbstractCompany.cs | 7 +- .../ListGenericObjects.cs | 10 +- .../MassiveGenericObjects.cs | 11 +- .../StorageCollection.cs | 32 +-- 11 files changed, 249 insertions(+), 109 deletions(-) create mode 100644 ProjectMonorail/Configs/nlog.config create mode 100644 ProjectMonorail/Scripts/Exceptions/CollectionOverflowException.cs create mode 100644 ProjectMonorail/Scripts/Exceptions/ObjectNotFoundException.cs create mode 100644 ProjectMonorail/Scripts/Exceptions/PositionOutOfCollectionException.cs diff --git a/ProjectMonorail/Configs/nlog.config b/ProjectMonorail/Configs/nlog.config new file mode 100644 index 0000000..9037eba --- /dev/null +++ b/ProjectMonorail/Configs/nlog.config @@ -0,0 +1,13 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/ProjectMonorail/FormMonorailCollection.cs b/ProjectMonorail/FormMonorailCollection.cs index 7ad561b..0f37b33 100644 --- a/ProjectMonorail/FormMonorailCollection.cs +++ b/ProjectMonorail/FormMonorailCollection.cs @@ -1,13 +1,19 @@ -using ProjectMonorail.Scripts.Monorail.CollectionGenericObjects; +using Microsoft.Extensions.Logging; +using ProjectMonorail.Scripts.Monorail.CollectionGenericObjects; using ProjectMonorail.Scripts.Monorail.Drawnings; namespace ProjectMonorail { /// - /// + /// Форма работы с компанией и ее коллекцией /// public partial class FormMonorailCollection : Form { + /// + /// Логер + /// + private readonly ILogger _logger; + /// /// Хранилище коллекций /// @@ -21,10 +27,11 @@ namespace ProjectMonorail /// /// Конструктор /// - public FormMonorailCollection() + public FormMonorailCollection(ILogger logger) { InitializeComponent(); _storageCollection = new StorageCollection(); + _logger = logger; } /// @@ -51,35 +58,43 @@ namespace ProjectMonorail private void SetMonorail(DrawingMonorail monorail) { - if (monorail == null || _company == null) return; - - if (_company + monorail != -1) + try { - MessageBox.Show("Объект добавлен"); - pictureBox.Image = _company.Show(); + if (monorail == null || _company == null) return; + + if (_company + monorail != -1) + { + MessageBox.Show("Объект добавлен"); + pictureBox.Image = _company.Show(); + } } - else + catch (Exception ex) { MessageBox.Show("Не удалось добавить объект"); + _logger.LogError("Ошибка {Message}", ex.Message); } } private void buttonRemoveMonorail_Click(object sender, EventArgs e) { - if (string.IsNullOrEmpty(maskedTextBox.Text) || _company == null) return; - - if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return; - - int position = Convert.ToInt32(maskedTextBox.Text); - - if (_company - position != null) + try { - MessageBox.Show("Объект удален"); - pictureBox.Image = _company.Show(); + if (string.IsNullOrEmpty(maskedTextBox.Text) || _company == null) throw new Exception("Входные дынне пустые"); + + if (MessageBox.Show("Удалить объект?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return; + + int position = Convert.ToInt32(maskedTextBox.Text); + + if (_company - position != null) + { + MessageBox.Show("Объект удален"); + pictureBox.Image = _company.Show(); + } } - else + catch(Exception ex) { MessageBox.Show("Не удалось удалить объект"); + _logger.LogError("Ошибка {Message}", ex.Message); } } @@ -133,44 +148,57 @@ namespace ProjectMonorail /// private void ButtonCollectionAdd_Click(object sender, EventArgs e) { - if (string.IsNullOrEmpty(textBoxCollectionName.Text) || (!radioButtonList.Checked && !radioButtonMassive.Checked)) + try { - MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; + if (string.IsNullOrEmpty(textBoxCollectionName.Text) || (!radioButtonList.Checked && !radioButtonMassive.Checked)) + { + MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + CollectionType collectionType = CollectionType.None; + if (radioButtonMassive.Checked) + { + collectionType = CollectionType.Massive; + } + else if (radioButtonList.Checked) + { + collectionType = CollectionType.List; + } + _storageCollection.AddCollection(textBoxCollectionName.Text, + collectionType); + RerfreshListBoxItems(); } - CollectionType collectionType = CollectionType.None; - if (radioButtonMassive.Checked) + catch (Exception ex) { - collectionType = CollectionType.Massive; + _logger.LogError("Ошибка {Message}", ex.Message); } - else if (radioButtonList.Checked) - { - collectionType = CollectionType.List; - } - _storageCollection.AddCollection(textBoxCollectionName.Text, - collectionType); - RerfreshListBoxItems(); } - /// - /// Удаление коллекции - /// - /// - /// - private void ButtonCollectionDelete_Click(object sender, EventArgs e) + /// + /// Удаление коллекции + /// + /// + /// + private void ButtonCollectionDelete_Click(object sender, EventArgs e) { - // TODO прописать логику удаления элемента из коллекции - // нужно убедиться, что есть выбранная коллекция - // спросить у пользователя через MessageBox, что он подтверждает, что хочет удалить запись - // удалить и обновить ListBox - if (listBoxCollection.SelectedItem == null || listBoxCollection.SelectedIndex < 0) - { - MessageBox.Show("Коллекция для удаления не выбрана"); - return; + try { + // TODO прописать логику удаления элемента из коллекции + // нужно убедиться, что есть выбранная коллекция + // спросить у пользователя через MessageBox, что он подтверждает, что хочет удалить запись + // удалить и обновить ListBox + if (listBoxCollection.SelectedItem == null || listBoxCollection.SelectedIndex < 0) + { + MessageBox.Show("Коллекция для удаления не выбрана"); + return; + } + if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return; + _storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString()); + RerfreshListBoxItems(); + } + catch (Exception ex) + { + _logger.LogError("Ошибка {Message}", ex.Message); } - if (MessageBox.Show("Удалить коллекцию?", "Удаление", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return; - _storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString()); - RerfreshListBoxItems(); } /// @@ -180,27 +208,33 @@ namespace ProjectMonorail /// private void ButtonCreateCompany_Click(object sender, EventArgs e) { - if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null) + try { - MessageBox.Show("Коллекция не выбрана"); - return; + if (listBoxCollection.SelectedIndex < 0 || listBoxCollection.SelectedItem == null) + { + MessageBox.Show("Коллекция не выбрана"); + return; + } + ICollectionGenericObjects? collection = + _storageCollection[listBoxCollection.SelectedItem.ToString() ?? string.Empty]; + if (collection == null) + { + MessageBox.Show("Коллекция не проинициализирована"); + return; + } + switch (comboBoxSelectorCompany.Text) + { + case "Хранилище": + _company = new DepotSharingService(pictureBox.Width, pictureBox.Height, collection); + break; + } + panelCompanyTools.Enabled = true; + RerfreshListBoxItems(); } - ICollectionGenericObjects? collection = - _storageCollection[listBoxCollection.SelectedItem.ToString() ?? string.Empty]; - if (collection == null) + catch (Exception ex) { - MessageBox.Show("Коллекция не проинициализирована"); - return; + _logger.LogError("Ошибка {Message}", ex.Message); } - switch (comboBoxSelectorCompany.Text) - { - case "Хранилище": - _company = new DepotSharingService(pictureBox.Width, - pictureBox.Height, collection); - break; - } - panelCompanyTools.Enabled = true; - RerfreshListBoxItems(); } /// @@ -210,16 +244,19 @@ namespace ProjectMonorail /// private void SaveToolStripMenuItem_Click(object sender, EventArgs e) { - if (saveFileDialog.ShowDialog() == DialogResult.OK) + try { - if (_storageCollection.SaveData(saveFileDialog.FileName)) + if (saveFileDialog.ShowDialog() == DialogResult.OK) { + _storageCollection.SaveData(saveFileDialog.FileName); MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); + _logger.LogInformation("Сохранение прошло успешно в файл {filename}", saveFileDialog.FileName); } - else - { - MessageBox.Show("Не сохранилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); - } + } + catch (Exception ex) + { + MessageBox.Show("Не сохранилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogError("Ошибка {Message}", ex.Message); } } @@ -230,17 +267,20 @@ namespace ProjectMonorail /// private void LoadToolStripMenuItem_Click(object sender, EventArgs e) { - if (openFileDialog.ShowDialog() == DialogResult.OK) + try { - if (_storageCollection.LoadData(openFileDialog.FileName)) + if (openFileDialog.ShowDialog() == DialogResult.OK) { + _storageCollection.LoadData(openFileDialog.FileName); MessageBox.Show("Загрузка прошла успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); RerfreshListBoxItems(); + _logger.LogInformation("Загрузка успешна завершена"); } - else - { - MessageBox.Show("Не загрузилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); - } + } + catch(Exception ex) + { + MessageBox.Show("Не загрузилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogError("Ошибка {Message}", ex.Message); } } } diff --git a/ProjectMonorail/Program.cs b/ProjectMonorail/Program.cs index beba8fb..99fcf76 100644 --- a/ProjectMonorail/Program.cs +++ b/ProjectMonorail/Program.cs @@ -1,3 +1,7 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using NLog.Extensions.Logging; + namespace ProjectMonorail { internal static class Program @@ -6,12 +10,29 @@ namespace ProjectMonorail /// The main entry point for the application. /// [STAThread] - static void Main() + private static void Main() { - // To customize application configuration such as set high DPI settings or default font, - // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new FormMonorailCollection()); + + ServiceCollection services = new ServiceCollection(); + ConfigureServices(services); + using ServiceProvider serviceProvider = services.BuildServiceProvider(); + + Application.Run(serviceProvider.GetRequiredService()); + } + + /// + /// DI + /// + /// + private static void ConfigureServices(ServiceCollection services) + { + services.AddSingleton() + .AddLogging(option => + { + option.SetMinimumLevel(LogLevel.Information); + option.AddNLog("nlog.config"); + }); } } } \ No newline at end of file diff --git a/ProjectMonorail/ProjectMonorail.csproj b/ProjectMonorail/ProjectMonorail.csproj index e733a7f..7bf0b82 100644 --- a/ProjectMonorail/ProjectMonorail.csproj +++ b/ProjectMonorail/ProjectMonorail.csproj @@ -6,6 +6,10 @@ true enable + + + + True @@ -19,4 +23,9 @@ Resources.Designer.cs + + + Always + + \ No newline at end of file diff --git a/ProjectMonorail/Scripts/Exceptions/CollectionOverflowException.cs b/ProjectMonorail/Scripts/Exceptions/CollectionOverflowException.cs new file mode 100644 index 0000000..50ea4a6 --- /dev/null +++ b/ProjectMonorail/Scripts/Exceptions/CollectionOverflowException.cs @@ -0,0 +1,17 @@ +using System.Runtime.Serialization; + +namespace ProjectMonorail.Scripts.Exceptions +{ + /// + /// Класс, описывающий ошибку переполнения коллекции + /// + [Serializable] + public class CollectionOverflowException : ApplicationException + { + public CollectionOverflowException(int count) : base("В коллекции превышено допустимое количество: " + count) { } + public CollectionOverflowException() : base() { } + public CollectionOverflowException(string message) : base(message) { } + public CollectionOverflowException(string message, Exception exception) : base(message, exception) { } + protected CollectionOverflowException(SerializationInfo info, StreamingContext contex) : base(info, contex) { } + } +} diff --git a/ProjectMonorail/Scripts/Exceptions/ObjectNotFoundException.cs b/ProjectMonorail/Scripts/Exceptions/ObjectNotFoundException.cs new file mode 100644 index 0000000..1ad765c --- /dev/null +++ b/ProjectMonorail/Scripts/Exceptions/ObjectNotFoundException.cs @@ -0,0 +1,17 @@ +using System.Runtime.Serialization; + +namespace ProjectMonorail.Scripts.Exceptions +{ + /// + /// Класс, описывающий ошибку, что по указанной позиции нет элемента + /// + [Serializable] + public class ObjectNotFoundException : ApplicationException + { + public ObjectNotFoundException(int i) : base("Не найден объект по позиции " + i) { } + public ObjectNotFoundException() : base() { } + public ObjectNotFoundException(string message) : base(message) { } + public ObjectNotFoundException(string message, Exception exception) : base(message, exception) { } + protected ObjectNotFoundException(SerializationInfo info, StreamingContext contex) : base(info, contex) { } + } +} diff --git a/ProjectMonorail/Scripts/Exceptions/PositionOutOfCollectionException.cs b/ProjectMonorail/Scripts/Exceptions/PositionOutOfCollectionException.cs new file mode 100644 index 0000000..fc512ac --- /dev/null +++ b/ProjectMonorail/Scripts/Exceptions/PositionOutOfCollectionException.cs @@ -0,0 +1,17 @@ +using System.Runtime.Serialization; + +namespace ProjectMonorail.Scripts.Exceptions +{ + /// + /// Класс, описывающий ошибку выхода за границы коллекции + /// + [Serializable] + public class PositionOutOfCollectionException : ApplicationException + { + public PositionOutOfCollectionException(int i) : base("Выход за границы коллекции.Позиция " + i) { } + public PositionOutOfCollectionException() : base() { } + public PositionOutOfCollectionException(string message) : base(message) { } + public PositionOutOfCollectionException(string message, Exception exception) : base(message, exception) { } + protected PositionOutOfCollectionException(SerializationInfo info, StreamingContext contex) : base(info, contex) { } + } +} diff --git a/ProjectMonorail/Scripts/Monorail/CollectionGenericObjects/AbstractCompany.cs b/ProjectMonorail/Scripts/Monorail/CollectionGenericObjects/AbstractCompany.cs index e335623..8c89a01 100644 --- a/ProjectMonorail/Scripts/Monorail/CollectionGenericObjects/AbstractCompany.cs +++ b/ProjectMonorail/Scripts/Monorail/CollectionGenericObjects/AbstractCompany.cs @@ -1,4 +1,5 @@ -using ProjectMonorail.Scripts.Monorail.Drawnings; +using ProjectMonorail.Scripts.Exceptions; +using ProjectMonorail.Scripts.Monorail.Drawnings; namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects { @@ -59,7 +60,7 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects /// public static int operator +(AbstractCompany company, DrawingMonorail monorail) { - return company._collection?.Insert(monorail) ?? -1; + return company._collection?.Insert(monorail) ?? throw new PositionOutOfCollectionException(); } /// @@ -70,7 +71,7 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects /// public static DrawingMonorail operator -(AbstractCompany company, int position) { - return company._collection?.Remove(position); + return company._collection?.Remove(position) ?? throw new ObjectNotFoundException(); } /// diff --git a/ProjectMonorail/Scripts/Monorail/CollectionGenericObjects/ListGenericObjects.cs b/ProjectMonorail/Scripts/Monorail/CollectionGenericObjects/ListGenericObjects.cs index 67fdfc7..2a5d150 100644 --- a/ProjectMonorail/Scripts/Monorail/CollectionGenericObjects/ListGenericObjects.cs +++ b/ProjectMonorail/Scripts/Monorail/CollectionGenericObjects/ListGenericObjects.cs @@ -1,4 +1,6 @@  +using ProjectMonorail.Scripts.Exceptions; + namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects { /// @@ -38,7 +40,7 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects public T? Get(int position) { // TODO проверка позиции - if (position < 0 || position >= _collection.Count) return null; + if (position < 0 || position >= _collection.Count) throw new PositionOutOfCollectionException(position); return _collection[position]; } @@ -47,7 +49,7 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects // TODO проверка, что не превышено максимальное количество элементов // TODO вставка в конец набора - if (_collection.Count + 1 > _maxCount) return -1; + if (_collection.Count + 1 > _maxCount) throw new CollectionOverflowException(_maxCount); _collection.Add(obj); return _collection.Count + 1; @@ -58,7 +60,7 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects // TODO проверка, что не превышено максимальное количество элементов // TODO проверка позиции // TODO вставка по позиции - if (position < 0 || position > _collection.Count || _collection[position] != null) return -1; + if (position < 0 || position > _collection.Count || _collection[position] != null) throw new PositionOutOfCollectionException(position); _collection.Insert(position, obj); @@ -70,7 +72,7 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects // TODO проверка позиции // TODO удаление объекта из списка - if (position < 0 || position > _collection.Count) return null; + if (position < 0 || position > _collection.Count) throw new PositionOutOfCollectionException(position); T temp = _collection[position]; diff --git a/ProjectMonorail/Scripts/Monorail/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectMonorail/Scripts/Monorail/CollectionGenericObjects/MassiveGenericObjects.cs index a7d033d..34fc802 100644 --- a/ProjectMonorail/Scripts/Monorail/CollectionGenericObjects/MassiveGenericObjects.cs +++ b/ProjectMonorail/Scripts/Monorail/CollectionGenericObjects/MassiveGenericObjects.cs @@ -1,5 +1,4 @@ -using ProjectMonorail.Scripts.Monorail.Drawnings; -using System.Diagnostics; +using ProjectMonorail.Scripts.Exceptions; namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects { @@ -61,7 +60,7 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects if (InsertingElementCollection(i, obj)) return i; } - return -1; + throw new Exception("Превышение лимита Count"); } public int Insert(T obj, int position) @@ -71,7 +70,7 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects // ищется свободное место после этой позиции и идет вставка туда // если нет после, ищем до // TODO вставка - if (!(position >= 0 && position < Count)) return -1; + if (!(position >= 0 && position < Count)) throw new PositionOutOfCollectionException(position); if (InsertingElementCollection(position, obj)) return position; for (int i = position + 1; i < Count; i++) @@ -84,7 +83,7 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects if (InsertingElementCollection(i, obj)) return i; } - return -1; + throw new Exception("Нет свободного места для вставки"); } public T Remove(int position) @@ -92,7 +91,7 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects // TODO проверка позиции // TODO удаление объекта из массива, присвоив элементу массива значение null - if (!(position >= 0 && position < Count) || _collection[position] == null) return null; + if (!(position >= 0 && position < Count) || _collection[position] == null) throw new PositionOutOfCollectionException(position); T obj = _collection[position]; _collection[position] = null; diff --git a/ProjectMonorail/Scripts/Monorail/CollectionGenericObjects/StorageCollection.cs b/ProjectMonorail/Scripts/Monorail/CollectionGenericObjects/StorageCollection.cs index 8c17858..1811754 100644 --- a/ProjectMonorail/Scripts/Monorail/CollectionGenericObjects/StorageCollection.cs +++ b/ProjectMonorail/Scripts/Monorail/CollectionGenericObjects/StorageCollection.cs @@ -1,4 +1,5 @@ -using ProjectMonorail.Scripts.Monorail.Drawnings; +using ProjectMonorail.Scripts.Exceptions; +using ProjectMonorail.Scripts.Monorail.Drawnings; using System.Diagnostics; using System.Text; @@ -66,7 +67,7 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects collection = new MassiveGenericObjects(); break; default: - return; + throw new Exception("Collection Type is not selected: collectionType = " + collectionType); } _storages.Add(name, collection); @@ -105,12 +106,13 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects /// /// Путь и имя файла /// true - сохранение прошло успешно, false - ошибка при сохранении данных - public bool SaveData(string filename) + public void SaveData(string filename) { if (_storages.Count == 0) { - return false; + throw new Exception("В хранилище отсутствуют коллекции для сохранения"); } + if (File.Exists(filename)) { File.Delete(filename); @@ -146,7 +148,6 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects using FileStream fs = new(filename, FileMode.Create); byte[] info = new UTF8Encoding(true).GetBytes(sb.ToString()); fs.Write(info, 0, info.Length); - return true; } /// @@ -154,12 +155,13 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects /// /// Путь и имя файла /// true - загрузка прошла успешно, false - ошибка при загрузке данных - public bool LoadData(string filename) + public void LoadData(string filename) { if (!File.Exists(filename)) { - return false; + throw new Exception("Файл не существует"); } + string bufferTextFromFile = ""; using (FileStream fs = new(filename, FileMode.Open)) { @@ -173,13 +175,12 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects string[] strs = bufferTextFromFile.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); if (strs == null || strs.Length == 0) { - return false; + throw new Exception("В файле нет данных"); } if (!strs[0].Equals(_collectionKey)) { - //если нет такой записи, то это не те данные - return false; + throw new Exception("В файле неверные данные"); } _storages.Clear(); @@ -197,7 +198,7 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects StorageCollection.CreateCollection(collectionType); if (collection == null) { - return false; + throw new Exception("Не удалось определить тип коллекции: " + record[1]); } collection.MaxCount = Convert.ToInt32(record[2]); string[] set = record[3].Split(_separatorItems, @@ -206,15 +207,18 @@ namespace ProjectMonorail.Scripts.Monorail.CollectionGenericObjects { if (elem?.CreateDrawingMonorail() is T monorail) { - if (collection.Insert(monorail) == -1) + try { - return false; + if (collection.Insert(monorail) == -1) + throw new Exception("Объект не удалось добавить в коллекцию: " + record[3]); } + catch (CollectionOverflowException ex) { + throw new Exception("Коллекция переполнена", ex); + } } } _storages.Add(record[0], collection); } - return true; } private static ICollectionGenericObjects? CreateCollection(CollectionType collectionType)