20211113 C#10 Update

This commit is contained in:
2021-11-13 15:39:16 +03:00
parent 438c123876
commit 869dc25fb4
9 changed files with 448 additions and 472 deletions

View File

@@ -1,34 +1,33 @@
namespace anbs_cp
{
/// <summary>
/// Форматирует число элементов в понятную строку
/// </summary>
public class CountFormatter : IValueFormatter
{
#region ойства класса
/// <summary>
/// Имена чисел (тысяч, миллионов, миллиардов и т.п.)
/// </summary>
public string[] CountNames { get; set; } = { "", "тыс.", "млн.", "млрд." };
/// <summary>
/// Знаков после запятой
/// </summary>
public byte DecimalPlaces { get; set; } = 1;
/// <summary>
/// Делители чисел
/// </summary>
public long[] Delimeters { get; set; } = { 1000, 1000000, 1000000000 };
#endregion
namespace anbs_cp;
#region Реализация интерфейса
/// <summary>
/// Реализация интерфейса
/// </summary>
public string[] ValueNames { get => CountNames; set => CountNames = value; }
/// <summary>
/// Реализация интерфейса
/// </summary>
public long[] MaxSizes { get => Delimeters; set => Delimeters = value; }
#endregion
}
/// <summary>
/// Форматирует число элементов в понятную строку
/// </summary>
public class CountFormatter: IValueFormatter
{
#region ойства класса
/// <summary>
/// Имена чисел (тысяч, миллионов, миллиардов и т.п.)
/// </summary>
public string[] CountNames { get; set; } = { "", "тыс.", "млн.", "млрд." };
/// <summary>
/// Знаков после запятой
/// </summary>
public byte DecimalPlaces { get; set; } = 1;
/// <summary>
/// Делители чисел
/// </summary>
public long[] Delimeters { get; set; } = { 1000, 1000000, 1000000000 };
#endregion
#region Реализация интерфейса
/// <summary>
/// Реализация интерфейса
/// </summary>
public string[] ValueNames { get => CountNames; set => CountNames = value; }
/// <summary>
/// Реализация интерфейса
/// </summary>
public long[] MaxSizes { get => Delimeters; set => Delimeters = value; }
#endregion
}

View File

@@ -1,56 +1,55 @@
namespace anbs_cp
{
/// <summary>
/// Форматирует размер файла/папки в понятную строку
/// </summary>
public class FileSizeFormatter : IValueFormatter
{
#region ойства класса
/// <summary>
/// Имена размеров (байт, килобайт, мегабайт, гигабайт и террабайт)
/// </summary>
public string[] SizeNames { get; set; } = { "Байт", "Кб", "Мб", "Гб", "Тб" };
/// <summary>
/// Знаков после запятой
/// </summary>
public byte DecimalPlaces { get; set; } = 2;
/// <summary>
/// Максимально байт (далее идут Кбайты)
/// </summary>
public long ByteMax { get; set; } = 1024;
/// <summary>
/// Максимально Кбайт (далее идут Мбайты)
/// </summary>
public long KByteMax { get; set; } = 1048576;
/// <summary>
/// Максимально Мбайт (далее идут Гбайты)
/// </summary>
public long MByteMax { get; set; } = 1073741824;
/// <summary>
/// Максимально Гбайт (далее идут Тбайты)
/// </summary>
public long GByteMax { get; set; } = 1099511627776;
#endregion
namespace anbs_cp;
#region Реализация интерфейса
/// <summary>
/// Реализация интерфейса
/// </summary>
public string[] ValueNames { get => SizeNames; set => SizeNames = value; }
/// <summary>
/// Реализация интерфейса
/// </summary>
public long[] MaxSizes
/// <summary>
/// Форматирует размер файла/папки в понятную строку
/// </summary>
public class FileSizeFormatter: IValueFormatter
{
#region ойства класса
/// <summary>
/// Имена размеров (байт, килобайт, мегабайт, гигабайт и террабайт)
/// </summary>
public string[] SizeNames { get; set; } = { "Байт", "Кб", "Мб", "Гб", "Тб" };
/// <summary>
/// Знаков после запятой
/// </summary>
public byte DecimalPlaces { get; set; } = 2;
/// <summary>
/// Максимально байт (далее идут Кбайты)
/// </summary>
public long ByteMax { get; set; } = 1024;
/// <summary>
/// Максимально Кбайт (далее идут Мбайты)
/// </summary>
public long KByteMax { get; set; } = 1048576;
/// <summary>
/// Максимально Мбайт (далее идут Гбайты)
/// </summary>
public long MByteMax { get; set; } = 1073741824;
/// <summary>
/// Максимально Гбайт (далее идут Тбайты)
/// </summary>
public long GByteMax { get; set; } = 1099511627776;
#endregion
#region Реализация интерфейса
/// <summary>
/// Реализация интерфейса
/// </summary>
public string[] ValueNames { get => SizeNames; set => SizeNames = value; }
/// <summary>
/// Реализация интерфейса
/// </summary>
public long[] MaxSizes
{
get => new long[] { ByteMax, KByteMax, MByteMax, GByteMax };
set
{
get => new long[] { ByteMax, KByteMax, MByteMax, GByteMax };
set
{
ByteMax = value[0];
KByteMax = value[1];
MByteMax = value[2];
GByteMax = value[3];
}
ByteMax = value[0];
KByteMax = value[1];
MByteMax = value[2];
GByteMax = value[3];
}
#endregion
}
#endregion
}

View File

@@ -1,82 +1,75 @@
namespace anbs_cp
namespace anbs_cp;
/// <summary>
/// Форматирует размерности в понятную строку
/// </summary>
public interface IValueFormatter
{
#region Определения интерфейса
/// <summary>
/// Форматирует размерности в понятную строку
/// Имена размерностей
/// </summary>
public interface IValueFormatter
public string[] ValueNames { get; set; }
/// <summary>
/// Знаков после запятой
/// </summary>
public byte DecimalPlaces { get; set; }
/// <summary>
/// Максимальные размеры (массив ulong[4])
/// </summary>
public long[] MaxSizes { get; set; }
#endregion
#region Методы интерфейса
/// <summary>
/// Форматирование размерности
/// </summary>
/// <param name="value">Размерность, требующая форматирования</param>
/// <returns>Форматированная размерность (например, 20 Мб)</returns>
public string Format (long value)
{
//Левая граница
long leftnum;
//Правая граница
long rightnum;
#region Определения интерфейса
/// <summary>
/// Имена размерностей
/// </summary>
public string[] ValueNames { get; set; }
/// <summary>
/// Знаков после запятой
/// </summary>
public byte DecimalPlaces { get; set; }
/// <summary>
/// Максимальные размеры (массив ulong[4])
/// </summary>
public long[] MaxSizes { get; set; }
#endregion
#region Методы интерфейса
/// <summary>
/// Форматирование размерности
/// </summary>
/// <param name="value">Размерность, требующая форматирования</param>
/// <returns>Форматированная размерность (например, 20 Мб)</returns>
public string Format(long value)
for (int i = 0; i <= MaxSizes.Length; i++)
{
//Левая граница
long leftnum;
//Правая граница
long rightnum;
leftnum = i == 0 ? 0 : MaxSizes[i - 1];
for (int i = 0; i <= MaxSizes.Length; i++)
{
if (i == 0)
leftnum = 0;
else
leftnum = MaxSizes[i - 1];
rightnum = i == MaxSizes.Length ? long.MaxValue : MaxSizes[i];
if (i == MaxSizes.Length)
rightnum = long.MaxValue;
else
rightnum = MaxSizes[i];
if ((value >= leftnum) && (value < rightnum))
return $"{FormatValue(value, leftnum)} {ValueNames[i]}";
if ((value >= leftnum) && (value < rightnum))
return $"{FormatValue(value, leftnum)} {ValueNames[i]}";
}
return value.ToString();
}
/// <summary>
/// Деление числа на число с DecimalPlaces знаками после запятой
/// </summary>
/// <param name="dividend">Делимое число</param>
/// <param name="divider">Число-делитель</param>
/// <returns>Частное (с DecimalPlaces знаками после запятой)</returns>
private string FormatValue(long dividend, long divider)
{
if (divider == 0)
{
return $"{dividend}";
}
long delim = 1;
for (int i = 0; i <= DecimalPlaces; i++)
{
delim *= 10;
}
decimal value = Math.Round((decimal)(dividend * delim / divider)) / delim;
return $"{value}";
}
#endregion
return value.ToString();
}
/// <summary>
/// Деление числа на число с DecimalPlaces знаками после запятой
/// </summary>
/// <param name="dividend">Делимое число</param>
/// <param name="divider">Число-делитель</param>
/// <returns>Частное (с DecimalPlaces знаками после запятой)</returns>
private string FormatValue (long dividend, long divider)
{
if (divider == 0)
{
return $"{dividend}";
}
long delim = 1;
for (int i = 0; i <= DecimalPlaces; i++)
{
delim *= 10;
}
decimal value = Math.Round((decimal)(dividend * delim / divider)) / delim;
return $"{value}";
}
#endregion
}

View File

@@ -1,48 +1,46 @@
using System.Collections.Generic;
namespace anbs_cp
namespace anbs_cp;
/// <summary>
/// Класс, добавляющий реализацию некоторых методов Delphi, которые упрощают работу в C#.
/// </summary>
public static class LikeDelphi
{
/// <summary>
/// Класс, добавляющий реализацию некоторых методов Delphi, которые упрощают работу в C#.
/// Аналог функции IncludeTrailingBackslash
/// </summary>
public static class LikeDelphi
/// <param name="path">Путь, к которому нужно добавить slash</param>
/// <returns>Путь со slash в конце</returns>
public static string IncludeTrailingBackslash (string path)
{
/// <summary>
/// Аналог функции IncludeTrailingBackslash
/// </summary>
/// <param name="path">Путь, к которому нужно добавить slash</param>
/// <returns>Путь со slash в конце</returns>
public static string IncludeTrailingBackslash(string path)
string result = path;
int Index = path.Length - 1;
if (path[Index] != '\\')
{
string result = path;
int Index = path.Length - 1;
if (path[Index] != '\\')
{
result = $"{path}\\";
}
return result;
result = $"{path}\\";
}
/// <summary>
/// Парсер строки в множество строк
/// </summary>
/// <param name="astring">Строка, которую нужно разбить</param>
/// <param name="delim">Символ-делитель строки</param>
/// <returns>Массив строк</returns>
public static List<string> ParseString(string astring, char delim)
return result;
}
/// <summary>
/// Парсер строки в множество строк
/// </summary>
/// <param name="astring">Строка, которую нужно разбить</param>
/// <param name="delim">Символ-делитель строки</param>
/// <returns>Массив строк</returns>
public static List<string> ParseString (string astring, char delim)
{
int from = -1;
int to;
List<string> result = new();
do
{
int from = -1;
int to;
List<string> result = new();
do
{
from++;
to = astring.IndexOf(delim, from);
if (to <= 0)
to = astring.Length;
if (from != to)
result.Add(astring[from..(to-from)]);
from = to;
} while (to != astring.Length);
return result;
}
from++;
to = astring.IndexOf(delim, from);
if (to <= 0)
to = astring.Length;
if (from != to)
result.Add(astring[from..(to - from)]);
from = to;
} while (to != astring.Length);
return result;
}
}

View File

@@ -1,114 +1,113 @@
namespace anbs_cp
{
/// <summary>
/// Конвертер типов на манер Delphi
/// </summary>
public static class TypeConverter
{
#region Конвертация числа в строку
/// <summary>
/// Преобразование int в string
/// </summary>
/// <param name="AInt">Число</param>
/// <returns>Строка</returns>
public static string IntToStr(int AInt) => AInt.ToString();
/// <summary>
/// Преобразование uint в string
/// </summary>
/// <param name="AInt">Число</param>
/// <returns>Строка</returns>
public static string IntToStr(uint AInt) => AInt.ToString();
/// <summary>
/// Преобразование long в string
/// </summary>
/// <param name="AInt">Число</param>
/// <returns>Строка</returns>
public static string IntToStr(long AInt) => AInt.ToString();
/// <summary>
/// Преобразование ulong в string
/// </summary>
/// <param name="AInt">Число</param>
/// <returns>Строка</returns>
public static string IntToStr(ulong AInt) => AInt.ToString();
/// <summary>
/// Преобразование byte в string
/// </summary>
/// <param name="AInt">Число</param>
/// <returns>Строка</returns>
public static string IntToStr(byte AInt) => AInt.ToString();
#endregion
namespace anbs_cp;
#region Конвертация строки в число
/// <summary>
/// Преобразование строки в число
/// </summary>
/// <param name="AStr">Строка</param>
/// <param name="ADefault">Значение по умолчанию (по умолчанию, 0)</param>
/// <returns>Число</returns>
public static int StrToInt(string AStr, int ADefault = 0)
/// <summary>
/// Конвертер типов на манер Delphi
/// </summary>
public static class TypeConverter
{
#region Конвертация числа в строку
/// <summary>
/// Преобразование int в string
/// </summary>
/// <param name="AInt">Число</param>
/// <returns>Строка</returns>
public static string IntToStr (int AInt) => AInt.ToString();
/// <summary>
/// Преобразование uint в string
/// </summary>
/// <param name="AInt">Число</param>
/// <returns>Строка</returns>
public static string IntToStr (uint AInt) => AInt.ToString();
/// <summary>
/// Преобразование long в string
/// </summary>
/// <param name="AInt">Число</param>
/// <returns>Строка</returns>
public static string IntToStr (long AInt) => AInt.ToString();
/// <summary>
/// Преобразование ulong в string
/// </summary>
/// <param name="AInt">Число</param>
/// <returns>Строка</returns>
public static string IntToStr (ulong AInt) => AInt.ToString();
/// <summary>
/// Преобразование byte в string
/// </summary>
/// <param name="AInt">Число</param>
/// <returns>Строка</returns>
public static string IntToStr (byte AInt) => AInt.ToString();
#endregion
#region Конвертация строки в число
/// <summary>
/// Преобразование строки в число
/// </summary>
/// <param name="AStr">Строка</param>
/// <param name="ADefault">Значение по умолчанию (по умолчанию, 0)</param>
/// <returns>Число</returns>
public static int StrToInt (string AStr, int ADefault = 0)
{
if (!int.TryParse(AStr, out int result))
{
if (!int.TryParse(AStr, out int result))
{
result = ADefault;
}
return result;
result = ADefault;
}
/// <summary>
/// Преобразование строки в число
/// </summary>
/// <param name="AStr">Строка</param>
/// <param name="ADefault">Значение по умолчанию (по умолчанию, 0)</param>
/// <returns>Число</returns>
public static uint StrToUInt(string AStr, uint ADefault = 0)
{
if (!uint.TryParse(AStr, out uint result))
{
result = ADefault;
}
return result;
}
/// <summary>
/// Преобразование строки в число
/// </summary>
/// <param name="AStr">Строка</param>
/// <param name="ADefault">Значение по умолчанию (по умолчанию, 0)</param>
/// <returns>Число</returns>
public static long StrToInt64(string AStr, long ADefault = 0)
{
if (!long.TryParse(AStr, out long result))
{
result = ADefault;
}
return result;
}
/// <summary>
/// Преобразование строки в число
/// </summary>
/// <param name="AStr">Строка</param>
/// <param name="ADefault">Значение по умолчанию (по умолчанию, 0)</param>
/// <returns>Число</returns>
public static ulong StrToUInt64(string AStr, ulong ADefault = 0)
{
if (!ulong.TryParse(AStr, out ulong result))
{
result = ADefault;
}
return result;
}
/// <summary>
/// Преобразование строки в число
/// </summary>
/// <param name="AStr">Строка</param>
/// <param name="ADefault">Значение по умолчанию (по умолчанию, 0)</param>
/// <returns>Число</returns>
public static byte StrToByte(string AStr, byte ADefault = 0)
{
if (!byte.TryParse(AStr, out byte result))
{
result = ADefault;
}
return result;
}
#endregion
return result;
}
/// <summary>
/// Преобразование строки в число
/// </summary>
/// <param name="AStr">Строка</param>
/// <param name="ADefault">Значение по умолчанию (по умолчанию, 0)</param>
/// <returns>Число</returns>
public static uint StrToUInt (string AStr, uint ADefault = 0)
{
if (!uint.TryParse(AStr, out uint result))
{
result = ADefault;
}
return result;
}
/// <summary>
/// Преобразование строки в число
/// </summary>
/// <param name="AStr">Строка</param>
/// <param name="ADefault">Значение по умолчанию (по умолчанию, 0)</param>
/// <returns>Число</returns>
public static long StrToInt64 (string AStr, long ADefault = 0)
{
if (!long.TryParse(AStr, out long result))
{
result = ADefault;
}
return result;
}
/// <summary>
/// Преобразование строки в число
/// </summary>
/// <param name="AStr">Строка</param>
/// <param name="ADefault">Значение по умолчанию (по умолчанию, 0)</param>
/// <returns>Число</returns>
public static ulong StrToUInt64 (string AStr, ulong ADefault = 0)
{
if (!ulong.TryParse(AStr, out ulong result))
{
result = ADefault;
}
return result;
}
/// <summary>
/// Преобразование строки в число
/// </summary>
/// <param name="AStr">Строка</param>
/// <param name="ADefault">Значение по умолчанию (по умолчанию, 0)</param>
/// <returns>Число</returns>
public static byte StrToByte (string AStr, byte ADefault = 0)
{
if (!byte.TryParse(AStr, out byte result))
{
result = ADefault;
}
return result;
}
#endregion
}

View File

@@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Version>1.20211111.0</Version>
<Version>1.2021.1113</Version>
<Authors>Alexander Babaev</Authors>
<Product>ANB Software Components Pack</Product>
<Description>Library of some useful functions in C# language.</Description>
@@ -15,8 +15,8 @@
<SignAssembly>False</SignAssembly>
<PackageProjectUrl>https://github.com/GoodBoyAlex/anbsoftware_componentspack</PackageProjectUrl>
<RepositoryUrl>https://github.com/GoodBoyAlex/anbsoftware_componentspack</RepositoryUrl>
<AssemblyVersion>1.2021.1111</AssemblyVersion>
<FileVersion>1.2021.1111</FileVersion>
<AssemblyVersion>1.2021.1113</AssemblyVersion>
<FileVersion>1.2021.1113</FileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">