20231123
This commit is contained in:
@@ -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
|
||||
}
|
Reference in New Issue
Block a user