This commit is contained in:
Alexander 2023-11-23 19:33:30 +03:00
parent fa7bb78ed4
commit 77c602cd9c
12 changed files with 85 additions and 127 deletions

View File

@ -323,10 +323,11 @@ public class ActionState<T>
#region Добавление другого состояния
/// <summary>
/// Добавляет другое состояние (например, результат другого действия, который возвращает <see cref="ActionState"/>).
/// Добавляет другое состояние (например, результат другого действия, который возвращает &lt;see cref="ActionState"/&gt;).
/// </summary>
/// <typeparam name="T">Тип параметра</typeparam>
/// <param name="state">Запись состояния</param>
public void AddState(ActionState state)
public void AddState (ActionState<T> state)
{
AddErrors(state.Errors);
AddWarnings(state.Warnings);

View File

@ -6,4 +6,14 @@
/// Обновлено 2023.11.1
/// * Добавлен класс ActionState без возвращаемого значения
/// </summary>
public sealed class ActionState: ActionState<string> { }
public sealed class ActionState: ActionState<string>
{
/// <summary>
/// Добавляет другое состояние (например, результат другого действия, который возвращает &lt;see cref="ActionState"/&gt;).
/// </summary>
/// <param name="state">Запись состояния</param>
public void AddState (ActionState state)
{
base.AddState(state);
}
}

View File

@ -3,24 +3,26 @@
/// <summary>
/// Обработчик параметров консоли
/// </summary>
public sealed class ConsoleParamsParser
/// <param name="consoleParams">Параметры консоли</param>
public sealed class ConsoleParamsParser (IEnumerable<string> consoleParams)
{
/// <summary>
/// Массив параметров
/// </summary>
private readonly List<(string, string?)> _paramsList;
private readonly KeyValueList<string, string?> _paramsList = ParseConsoleParams(consoleParams);
/// <summary>
/// Конструктор
/// Парсер параметров
/// </summary>
/// <param name="consoleParams">Параметры консоли</param>
public ConsoleParamsParser (string[] consoleParams)
/// <param name="paramsList">Входящий список параметров</param>
/// <returns></returns>
private static KeyValueList<string, string?> ParseConsoleParams (IEnumerable<string> paramsList)
{
//Создаю список параметров
_paramsList = new();
KeyValueList<string, string?> 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;
}
/// <summary>
@ -42,7 +47,7 @@ public sealed class ConsoleParamsParser
/// <param name="param">Параметр</param>
/// <returns>Есть ли параметр в списке</returns>
public bool HasParam (string param) =>
_paramsList.Any(keyValue => keyValue.Item1 == param.ToLower());
_paramsList.Any(keyValue => keyValue.Key == param.ToLower());
/// <summary>
/// Получает значение параметра
@ -50,12 +55,12 @@ public sealed class ConsoleParamsParser
/// <param name="param"></param>
/// <returns></returns>
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;
/// <summary>
/// Получает список всех параметров
/// </summary>
/// <returns>Список всех параметров</returns>
public List<string> GetParamsList () =>
_paramsList.Select(static keyValue => keyValue.Item1.ToLower()).ToList();
public List<string?> GetParamsList () =>
_paramsList.Select(static keyValue => keyValue.Key?.ToLower()).ToList();
}

View File

@ -3,19 +3,11 @@
/// <summary>
/// Конвертер количества элементов
/// </summary>
public sealed class CountConverter : ValueConverter
public sealed class CountConverter (IEnumerable<string> valueNames, byte decimalPlace = 0): ValueConverter(
valueNames, 1000, decimalPlace)
{
/// <summary>
/// Имена размеров файлов по умолчанию
/// </summary>
public static readonly string[] DefaultNames = {"", "тыс.", "млн."};
/// <summary>
/// Конструктор класса
/// </summary>
/// <param name="valueNames">Массив имён размерностей</param>
/// <param name="decimalPlace">Знаков после запятой (0, 1, 2)</param>
public CountConverter (string[] valueNames, byte decimalPlace = 0) : base(valueNames, 1000, decimalPlace)
{
}
public static readonly string[] DefaultNames = { "", "тыс.", "млн." };
}

View File

@ -3,19 +3,13 @@
/// <summary>
/// Конвертер размеров файлов
/// </summary>
public sealed class FileSizeConverter : ValueConverter
/// <param name="valueNames">Массив имён размерностей</param>
/// <param name="decimalPlace">Знаков после запятой (0, 1, 2)</param>
public sealed class FileSizeConverter (IEnumerable<string> valueNames, byte decimalPlace = 2): ValueConverter(
valueNames, 1024, decimalPlace)
{
/// <summary>
/// Имена размеров файлов по умолчанию
/// </summary>
public static readonly string[] DefaultNames = {"байт", "Кб", "Мб", "Гб", "Тб"};
/// <summary>
/// Конструктор класса
/// </summary>
/// <param name="valueNames">Массив имён размерностей</param>
/// <param name="decimalPlace">Знаков после запятой (0, 1, 2)</param>
public FileSizeConverter (string[] valueNames, byte decimalPlace = 2) : base(valueNames, 1024, decimalPlace)
{
}
public static readonly string[] DefaultNames = { "байт", "Кб", "Мб", "Гб", "Тб" };
}

View File

@ -9,7 +9,7 @@ namespace anbs_cp.Classes;
/// </summary>
/// <typeparam name="TK">Тип ключа</typeparam>
/// <typeparam name="TV">Тип значения</typeparam>
public class KeyValueList<TK, TV>: IEnumerable<KeyValue<TK, TV>>
public sealed class KeyValueList<TK, TV>: IEnumerable<KeyValue<TK, TV>>
{
/// <summary>
/// Хранение значений
@ -58,7 +58,7 @@ public class KeyValueList<TK, TV>: IEnumerable<KeyValue<TK, TV>>
public void ChangeValue (KeyValue<TK, TV> keyValue)
{
// Если такой ключ не существует
if (!Contains(keyValue.Key!))
if (!Contains(keyValue.Key))
{
// - тогда добавляю новое значение
Add(keyValue);
@ -68,7 +68,7 @@ public class KeyValueList<TK, TV>: IEnumerable<KeyValue<TK, TV>>
}
// Существующее значение
KeyValue<TK, TV> existValue = GetItem(keyValue.Key!) ?? new();
KeyValue<TK, TV> existValue = GetItem(keyValue.Key) ?? new();
// Удаляем существующее
_list.Remove(existValue);
@ -92,6 +92,7 @@ public class KeyValueList<TK, TV>: IEnumerable<KeyValue<TK, TV>>
public KeyValue<TK, TV>? GetItem (TK key)
{
// Ищем элемент в списке
// ReSharper disable once NullableWarningSuppressionIsUsed
foreach (KeyValue<TK, TV> keyValueItem in _list.Where(keyValueItem => keyValueItem.Key!.Equals(key)))
// - возвращаем его при нахождении
return keyValueItem;
@ -143,6 +144,7 @@ public class KeyValueList<TK, TV>: IEnumerable<KeyValue<TK, TV>>
/// </summary>
/// <param name="key">Ключ элемента</param>
/// <returns>Результат проверки</returns>
// ReSharper disable once NullableWarningSuppressionIsUsed
public bool Contains (TK key) => Keys.Any(keyParam => keyParam!.Equals(key));
#endregion

View File

@ -5,36 +5,27 @@ namespace anbs_cp.Classes;
/// <summary>
/// Абстрактный класс конвертера величин для отображения (улучшенный аналог ValueFormatter)
/// </summary>
public abstract class ValueConverter: IValueConverter
/// <param name="valueNames">Массив имён размерностей</param>
/// <param name="divider">Делитель</param>
/// <param name="decimalPlaces">Число знаков после запятой</param>
public abstract class ValueConverter (IEnumerable<string> valueNames, long divider, byte decimalPlaces): IValueConverter
{
/// <summary>
/// Конструктор
/// </summary>
/// <param name="valueNames">Массив имён размерностей</param>
/// <param name="divider">Делитель</param>
/// <param name="decimalPlaces">Число знаков после запятой</param>
protected ValueConverter (string[] valueNames, long divider, byte decimalPlaces)
{
ValueNames = valueNames;
Divider = divider;
DecimalPlaces = (byte)(decimalPlaces < 3 ? decimalPlaces : 2);
}
#region Реализация интерфейса
/// <summary>
/// Массив имён размерностей
/// </summary>
public string[] ValueNames { get; init; }
public string[] ValueNames { get; init; } = valueNames.ToArray();
/// <summary>
/// Делитель
/// </summary>
public long Divider { get; init; }
public long Divider { get; init; } = divider;
/// <summary>
/// Знаков после запятой (0, 1, 2)
/// </summary>
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
}

View File

@ -1,51 +1,35 @@
namespace anbs_cp.Structs;
/// <summary>
/// Пара ключ-значение
/// Пара ключ-значение
/// </summary>
/// <typeparam name="TK">Тип ключа</typeparam>
/// <typeparam name="TV">Тип значения</typeparam>
public struct KeyValue<TK, TV>
/// <param name="key">Ключ</param>
/// <param name="value">Значение</param>
public struct KeyValue<TK, TV>(TK key, TV? value)
{
#region Конструкторы
/// <summary>
/// Конструктор по умолчанию
/// </summary>
public KeyValue ()
{
Key = default;
Value = default;
}
/// <summary>
/// Конструктор со значениями
/// </summary>
/// <param name="key">Ключ</param>
/// <param name="value">Значение</param>
public KeyValue (TK key, TV value)
{
Key = key;
Value = value;
}
#endregion
#region Свойства
/// <summary>
/// Ключ
/// </summary>
public TK? Key { get; set; }
/// <summary>
/// Значение
/// Ключ
/// </summary>
public TV? Value { get; set; }
public TK Key { get; set; } = key;
/// <summary>
/// Значение
/// </summary>
public TV? Value { get; set; } = value;
#endregion
#region Методы
/// <summary>
/// Получает ключ-значение по умолчанию
/// Получает ключ-значение по умолчанию
/// </summary>
/// <returns>Ключ-значение по умолчанию</returns>
public static KeyValue<TK, TV> GetDefault() => new();
#endregion
}

View File

@ -3,40 +3,20 @@
/// <summary>
/// Двумерный размер
/// </summary>
public struct TwoDimSize
/// <param name="width">Длина</param>
/// <param name="height">Высота</param>
public struct TwoDimSize (int width = 0, int height = 0)
{
#region Приватные поля
/// <summary>
/// Длина (приватное)
/// </summary>
private int _pWidth;
private int _pWidth = width;
/// <summary>
/// Высота (приватное)
/// </summary>
private int _pHeight;
#endregion
#region Конструкторы
/// <summary>
/// Конструктор по умолчанию
/// </summary>
public TwoDimSize ()
{
Width = 0;
Height = 0;
}
/// <summary>
/// Конструктор
/// </summary>
/// <param name="width">Длина</param>
/// <param name="height">Высота</param>
public TwoDimSize (int width, int height)
{
Width = width;
Height = height;
}
private int _pHeight = height;
#endregion
#region Свойства

View File

@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>2023.1115.0</Version>
<Version>2023.1123.0</Version>
<Authors>Александр Бабаев</Authors>
<Product>Набор компонентов ANB Software</Product>
<Description>Библиотека полезных методов языка C#</Description>

View File

@ -6,18 +6,16 @@ using MySqlConnector;
namespace anbs_cp.Database.Classes;
public class MySqlEngine: IDbEngine
/// <summary>
/// База данных MySQL
/// </summary>
/// <param name="connectionString">Строка подключения базы данных</param>
public class MySqlEngine (string connectionString): IDbEngine
{
/// <summary>
/// Конструктор
/// </summary>
/// <param name="connectionString">Строка подключения базы данных</param>
public MySqlEngine (string connectionString) => ConnectionString = connectionString;
/// <summary>
/// Строка подключения базы данных
/// </summary>
public string ConnectionString { get; set; }
public string ConnectionString { get; set; } = connectionString;
#region Базовые операции
/// <summary>

View File

@ -8,7 +8,7 @@
<RootNamespace>anbs_cp.Database</RootNamespace>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<PackageId>ANBSoftware.ComponentsPack.Database</PackageId>
<Version>2023.11.14.0</Version>
<Version>2023.11.23.0</Version>
<Company>Александр Бабаев</Company>
<Product>Набор компонентов ANB Software для работы с БД</Product>
<Description>Библиотека полезных методов языка C# для работы с базами данных</Description>
@ -19,8 +19,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="2.1.21" />
<PackageReference Include="MySqlConnector" Version="2.3.0" />
<PackageReference Include="Dapper" Version="2.1.24" />
<PackageReference Include="MySqlConnector" Version="2.3.1" />
</ItemGroup>
</Project>