20231123
This commit is contained in:
parent
fa7bb78ed4
commit
77c602cd9c
@ -323,10 +323,11 @@ public class ActionState<T>
|
||||
#region Добавление другого состояния
|
||||
|
||||
/// <summary>
|
||||
/// Добавляет другое состояние (например, результат другого действия, который возвращает <see cref="ActionState"/>).
|
||||
/// Добавляет другое состояние (например, результат другого действия, который возвращает <see cref="ActionState"/>).
|
||||
/// </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);
|
||||
|
@ -6,4 +6,14 @@
|
||||
/// Обновлено 2023.11.1
|
||||
/// * Добавлен класс ActionState без возвращаемого значения
|
||||
/// </summary>
|
||||
public sealed class ActionState: ActionState<string> { }
|
||||
public sealed class ActionState: ActionState<string>
|
||||
{
|
||||
/// <summary>
|
||||
/// Добавляет другое состояние (например, результат другого действия, который возвращает <see cref="ActionState"/>).
|
||||
/// </summary>
|
||||
/// <param name="state">Запись состояния</param>
|
||||
public void AddState (ActionState state)
|
||||
{
|
||||
base.AddState(state);
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
@ -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 = { "", "тыс.", "млн." };
|
||||
}
|
||||
|
@ -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 = { "байт", "Кб", "Мб", "Гб", "Тб" };
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
@ -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
|
||||
}
|
@ -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 Свойства
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user