diff --git a/anbs_cp/Classes/ActionState.cs b/anbs_cp/Classes/ActionState.cs index 1bba81d..b980a73 100644 --- a/anbs_cp/Classes/ActionState.cs +++ b/anbs_cp/Classes/ActionState.cs @@ -323,10 +323,11 @@ public class ActionState #region Добавление другого состояния /// - /// Добавляет другое состояние (например, результат другого действия, который возвращает ). + /// Добавляет другое состояние (например, результат другого действия, который возвращает <see cref="ActionState"/>). /// + /// Тип параметра /// Запись состояния - public void AddState(ActionState state) + public void AddState (ActionState state) { AddErrors(state.Errors); AddWarnings(state.Warnings); diff --git a/anbs_cp/Classes/ActionStateSimply.cs b/anbs_cp/Classes/ActionStateSimply.cs index 8c73d9d..e186f7d 100644 --- a/anbs_cp/Classes/ActionStateSimply.cs +++ b/anbs_cp/Classes/ActionStateSimply.cs @@ -6,4 +6,14 @@ /// Обновлено 2023.11.1 /// * Добавлен класс ActionState без возвращаемого значения /// -public sealed class ActionState: ActionState { } \ No newline at end of file +public sealed class ActionState: ActionState +{ + /// + /// Добавляет другое состояние (например, результат другого действия, который возвращает <see cref="ActionState"/>). + /// + /// Запись состояния + public void AddState (ActionState state) + { + base.AddState(state); + } +} \ No newline at end of file diff --git a/anbs_cp/Classes/ConsoleParamsParser.cs b/anbs_cp/Classes/ConsoleParamsParser.cs index f932b55..42afa20 100644 --- a/anbs_cp/Classes/ConsoleParamsParser.cs +++ b/anbs_cp/Classes/ConsoleParamsParser.cs @@ -3,24 +3,26 @@ /// /// Обработчик параметров консоли /// -public sealed class ConsoleParamsParser +/// Параметры консоли +public sealed class ConsoleParamsParser (IEnumerable consoleParams) { /// /// Массив параметров /// - private readonly List<(string, string?)> _paramsList; + private readonly KeyValueList _paramsList = ParseConsoleParams(consoleParams); /// - /// Конструктор + /// Парсер параметров /// - /// Параметры консоли - public ConsoleParamsParser (string[] consoleParams) + /// Входящий список параметров + /// + private static KeyValueList ParseConsoleParams (IEnumerable paramsList) { //Создаю список параметров - _paramsList = new(); + KeyValueList result = new(); //Заполняю его - foreach (string consoleParam in consoleParams) + foreach (string consoleParam in paramsList) { //Индекс знака "=" int eqPlace = consoleParam.IndexOf('='); @@ -32,8 +34,11 @@ public sealed class ConsoleParamsParser string? value = eqPlace == -1 ? null : consoleParam[(eqPlace + 1)..].Trim(new[] { '"' }); //Сохраняю в списке - _paramsList.Add((param.ToLower(), value)); + result.Add(param.ToLower(), value); } + + // Возвращаю значение + return result; } /// @@ -42,7 +47,7 @@ public sealed class ConsoleParamsParser /// Параметр /// Есть ли параметр в списке public bool HasParam (string param) => - _paramsList.Any(keyValue => keyValue.Item1 == param.ToLower()); + _paramsList.Any(keyValue => keyValue.Key == param.ToLower()); /// /// Получает значение параметра @@ -50,12 +55,12 @@ public sealed class ConsoleParamsParser /// /// public string? GetValue (string param) => - !HasParam(param) ? null : _paramsList.FirstOrDefault(keyValue => keyValue.Item1 == param.ToLower()).Item2; + !HasParam(param) ? null : _paramsList.FirstOrDefault(keyValue => keyValue.Key == param.ToLower()).Value; /// /// Получает список всех параметров /// /// Список всех параметров - public List GetParamsList () => - _paramsList.Select(static keyValue => keyValue.Item1.ToLower()).ToList(); + public List GetParamsList () => + _paramsList.Select(static keyValue => keyValue.Key?.ToLower()).ToList(); } \ No newline at end of file diff --git a/anbs_cp/Classes/CountConverter.cs b/anbs_cp/Classes/CountConverter.cs index 662af0b..b04a2c2 100644 --- a/anbs_cp/Classes/CountConverter.cs +++ b/anbs_cp/Classes/CountConverter.cs @@ -3,19 +3,11 @@ /// /// Конвертер количества элементов /// -public sealed class CountConverter : ValueConverter +public sealed class CountConverter (IEnumerable valueNames, byte decimalPlace = 0): ValueConverter( + valueNames, 1000, decimalPlace) { /// /// Имена размеров файлов по умолчанию /// - public static readonly string[] DefaultNames = {"", "тыс.", "млн."}; - - /// - /// Конструктор класса - /// - /// Массив имён размерностей - /// Знаков после запятой (0, 1, 2) - public CountConverter (string[] valueNames, byte decimalPlace = 0) : base(valueNames, 1000, decimalPlace) - { - } + public static readonly string[] DefaultNames = { "", "тыс.", "млн." }; } diff --git a/anbs_cp/Classes/FileSizeConverter.cs b/anbs_cp/Classes/FileSizeConverter.cs index 5aa77ec..9e19fbe 100644 --- a/anbs_cp/Classes/FileSizeConverter.cs +++ b/anbs_cp/Classes/FileSizeConverter.cs @@ -3,19 +3,13 @@ /// /// Конвертер размеров файлов /// -public sealed class FileSizeConverter : ValueConverter +/// Массив имён размерностей +/// Знаков после запятой (0, 1, 2) +public sealed class FileSizeConverter (IEnumerable valueNames, byte decimalPlace = 2): ValueConverter( + valueNames, 1024, decimalPlace) { /// /// Имена размеров файлов по умолчанию /// - public static readonly string[] DefaultNames = {"байт", "Кб", "Мб", "Гб", "Тб"}; - - /// - /// Конструктор класса - /// - /// Массив имён размерностей - /// Знаков после запятой (0, 1, 2) - public FileSizeConverter (string[] valueNames, byte decimalPlace = 2) : base(valueNames, 1024, decimalPlace) - { - } + public static readonly string[] DefaultNames = { "байт", "Кб", "Мб", "Гб", "Тб" }; } diff --git a/anbs_cp/Classes/KeyValueList.cs b/anbs_cp/Classes/KeyValueList.cs index f9e0810..665bf3d 100644 --- a/anbs_cp/Classes/KeyValueList.cs +++ b/anbs_cp/Classes/KeyValueList.cs @@ -9,7 +9,7 @@ namespace anbs_cp.Classes; /// /// Тип ключа /// Тип значения -public class KeyValueList: IEnumerable> +public sealed class KeyValueList: IEnumerable> { /// /// Хранение значений @@ -58,7 +58,7 @@ public class KeyValueList: IEnumerable> public void ChangeValue (KeyValue keyValue) { // Если такой ключ не существует - if (!Contains(keyValue.Key!)) + if (!Contains(keyValue.Key)) { // - тогда добавляю новое значение Add(keyValue); @@ -68,7 +68,7 @@ public class KeyValueList: IEnumerable> } // Существующее значение - KeyValue existValue = GetItem(keyValue.Key!) ?? new(); + KeyValue existValue = GetItem(keyValue.Key) ?? new(); // Удаляем существующее _list.Remove(existValue); @@ -92,6 +92,7 @@ public class KeyValueList: IEnumerable> public KeyValue? GetItem (TK key) { // Ищем элемент в списке + // ReSharper disable once NullableWarningSuppressionIsUsed foreach (KeyValue keyValueItem in _list.Where(keyValueItem => keyValueItem.Key!.Equals(key))) // - возвращаем его при нахождении return keyValueItem; @@ -143,6 +144,7 @@ public class KeyValueList: IEnumerable> /// /// Ключ элемента /// Результат проверки + // ReSharper disable once NullableWarningSuppressionIsUsed public bool Contains (TK key) => Keys.Any(keyParam => keyParam!.Equals(key)); #endregion diff --git a/anbs_cp/Classes/ValueConverter.cs b/anbs_cp/Classes/ValueConverter.cs index ca89b23..36e96b4 100644 --- a/anbs_cp/Classes/ValueConverter.cs +++ b/anbs_cp/Classes/ValueConverter.cs @@ -5,36 +5,27 @@ namespace anbs_cp.Classes; /// /// Абстрактный класс конвертера величин для отображения (улучшенный аналог ValueFormatter) /// -public abstract class ValueConverter: IValueConverter +/// Массив имён размерностей +/// Делитель +/// Число знаков после запятой +public abstract class ValueConverter (IEnumerable valueNames, long divider, byte decimalPlaces): IValueConverter { - /// - /// Конструктор - /// - /// Массив имён размерностей - /// Делитель - /// Число знаков после запятой - protected ValueConverter (string[] valueNames, long divider, byte decimalPlaces) - { - ValueNames = valueNames; - Divider = divider; - DecimalPlaces = (byte)(decimalPlaces < 3 ? decimalPlaces : 2); - } - #region Реализация интерфейса + /// /// Массив имён размерностей /// - public string[] ValueNames { get; init; } + public string[] ValueNames { get; init; } = valueNames.ToArray(); /// /// Делитель /// - public long Divider { get; init; } + public long Divider { get; init; } = divider; /// /// Знаков после запятой (0, 1, 2) /// - public byte DecimalPlaces { get; init; } + public byte DecimalPlaces { get; init; } = (byte)(decimalPlaces < 3 ? decimalPlaces : 2); #endregion @@ -50,7 +41,8 @@ public abstract class ValueConverter: IValueConverter (decimal, int) result = DivideIt(value, 0); //Преобразую значение в строку - string resultValue = DecimalPlaces switch { + string resultValue = DecimalPlaces switch + { 0 => $"{result.Item1:F0}", 1 => $"{result.Item1:F1}", _ => $"{result.Item1:F2}" @@ -81,7 +73,7 @@ public abstract class ValueConverter: IValueConverter count++; //... и продолжаем цикл - return DivideIt(value / Divider, count); + return DivideIt(value / Divider, count); } #endregion } \ No newline at end of file diff --git a/anbs_cp/Structs/KeyValue.cs b/anbs_cp/Structs/KeyValue.cs index ab42d49..a343987 100644 --- a/anbs_cp/Structs/KeyValue.cs +++ b/anbs_cp/Structs/KeyValue.cs @@ -1,51 +1,35 @@ namespace anbs_cp.Structs; /// -/// Пара ключ-значение +/// Пара ключ-значение /// /// Тип ключа /// Тип значения -public struct KeyValue +/// Ключ +/// Значение +public struct KeyValue(TK key, TV? value) { - #region Конструкторы - /// - /// Конструктор по умолчанию - /// - public KeyValue () - { - Key = default; - Value = default; - } - - /// - /// Конструктор со значениями - /// - /// Ключ - /// Значение - public KeyValue (TK key, TV value) - { - Key = key; - Value = value; - } - #endregion - #region Свойства - /// - /// Ключ - /// - public TK? Key { get; set; } /// - /// Значение + /// Ключ /// - public TV? Value { get; set; } + public TK Key { get; set; } = key; + + /// + /// Значение + /// + public TV? Value { get; set; } = value; + #endregion #region Методы + /// - /// Получает ключ-значение по умолчанию + /// Получает ключ-значение по умолчанию /// /// Ключ-значение по умолчанию public static KeyValue GetDefault() => new(); + #endregion } \ No newline at end of file diff --git a/anbs_cp/Structs/TwoDimSize.cs b/anbs_cp/Structs/TwoDimSize.cs index 1e8db7d..75476af 100644 --- a/anbs_cp/Structs/TwoDimSize.cs +++ b/anbs_cp/Structs/TwoDimSize.cs @@ -3,40 +3,20 @@ /// /// Двумерный размер /// -public struct TwoDimSize +/// Длина +/// Высота +public struct TwoDimSize (int width = 0, int height = 0) { #region Приватные поля /// /// Длина (приватное) /// - private int _pWidth; + private int _pWidth = width; /// /// Высота (приватное) /// - private int _pHeight; - #endregion - - #region Конструкторы - /// - /// Конструктор по умолчанию - /// - public TwoDimSize () - { - Width = 0; - Height = 0; - } - - /// - /// Конструктор - /// - /// Длина - /// Высота - public TwoDimSize (int width, int height) - { - Width = width; - Height = height; - } + private int _pHeight = height; #endregion #region Свойства diff --git a/anbs_cp/anbs_cp.csproj b/anbs_cp/anbs_cp.csproj index adf789a..cbbba1c 100644 --- a/anbs_cp/anbs_cp.csproj +++ b/anbs_cp/anbs_cp.csproj @@ -2,7 +2,7 @@ net8.0 - 2023.1115.0 + 2023.1123.0 Александр Бабаев Набор компонентов ANB Software Библиотека полезных методов языка C# diff --git a/anbs_cpdb/Classes/MySqlEngine.cs b/anbs_cpdb/Classes/MySqlEngine.cs index e280601..8504b47 100644 --- a/anbs_cpdb/Classes/MySqlEngine.cs +++ b/anbs_cpdb/Classes/MySqlEngine.cs @@ -6,18 +6,16 @@ using MySqlConnector; namespace anbs_cp.Database.Classes; -public class MySqlEngine: IDbEngine +/// +/// База данных MySQL +/// +/// Строка подключения базы данных +public class MySqlEngine (string connectionString): IDbEngine { - /// - /// Конструктор - /// - /// Строка подключения базы данных - public MySqlEngine (string connectionString) => ConnectionString = connectionString; - /// /// Строка подключения базы данных /// - public string ConnectionString { get; set; } + public string ConnectionString { get; set; } = connectionString; #region Базовые операции /// diff --git a/anbs_cpdb/anbs_cpdb.csproj b/anbs_cpdb/anbs_cpdb.csproj index 0624317..714c536 100644 --- a/anbs_cpdb/anbs_cpdb.csproj +++ b/anbs_cpdb/anbs_cpdb.csproj @@ -8,7 +8,7 @@ anbs_cp.Database True ANBSoftware.ComponentsPack.Database - 2023.11.14.0 + 2023.11.23.0 Александр Бабаев Набор компонентов ANB Software для работы с БД Библиотека полезных методов языка C# для работы с базами данных @@ -19,8 +19,8 @@ - - + +