20250420
This commit is contained in:
@@ -35,6 +35,13 @@ public static class FileExtension
|
||||
public static FileHash GetHash (string fileName) =>
|
||||
new(fileName);
|
||||
|
||||
/// <summary>
|
||||
/// Получение содержимого файла
|
||||
/// </summary>
|
||||
/// <param name="fileName">Имя файла</param>
|
||||
/// <returns>Содержимое файла</returns>
|
||||
public static byte[] GetFileContent (string fileName) => File.ReadAllBytes(fileName);
|
||||
|
||||
#region Write
|
||||
/// <summary>
|
||||
/// Записывает данные <paramref name="data"/> в текстовый файл <paramref name="fileName"/>
|
||||
|
@@ -20,4 +20,50 @@ public static class GuidExtensions
|
||||
/// <param name="g">Guid</param>
|
||||
/// <returns>Guid пуст (null) или равен Guid.Empty</returns>
|
||||
public static bool IsNullOrEmpty (this Guid g) => g == Guid.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Генерирует <see cref="Guid"/>, удовлетворяющий условию <paramref name="predicate"/>
|
||||
/// </summary>
|
||||
/// <param name="predicate">Условие генерации <see cref="Guid"/></param>
|
||||
/// <returns>Новый <see cref="Guid"/></returns>
|
||||
public static Guid GenerateGuid (Func<Guid, bool> predicate)
|
||||
{
|
||||
// Задаю GUID
|
||||
Guid guid;
|
||||
|
||||
// Выполняй
|
||||
do
|
||||
{
|
||||
// - генерируй GUID
|
||||
guid = Guid.NewGuid();
|
||||
}
|
||||
// - пока не выполнено условие
|
||||
while (!predicate(guid));
|
||||
|
||||
// Возвращаю сгенерированный GUID
|
||||
return guid;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Генерирует <see cref="Guid"/>, удовлетворяющий условию <paramref name="asyncPredicate"/>
|
||||
/// </summary>
|
||||
/// <param name="asyncPredicate">Условие генерации <see cref="Guid"/></param>
|
||||
/// <returns>Новый <see cref="Guid"/></returns>
|
||||
public static async Task<Guid> GenerateGuidAsync (Func<Guid, Task<bool>> asyncPredicate)
|
||||
{
|
||||
// Задаю GUID
|
||||
Guid guid;
|
||||
|
||||
// Выполняй
|
||||
do
|
||||
{
|
||||
// - генерируй GUID
|
||||
guid = Guid.NewGuid();
|
||||
}
|
||||
// - пока не выполнено условие
|
||||
while (!await asyncPredicate(guid));
|
||||
|
||||
// Возвращаю сгенерированный GUID
|
||||
return guid;
|
||||
}
|
||||
}
|
@@ -1,5 +1,8 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
using anbs_cp.Classes;
|
||||
using anbs_cp.Enums;
|
||||
|
||||
namespace anbs_cp.Extensions;
|
||||
|
||||
/// <summary>
|
||||
@@ -13,4 +16,78 @@ public static class StringExtensions
|
||||
/// <param name="s">Строка</param>
|
||||
/// <returns>Строка пуста (null) или содержит только пробелы</returns>
|
||||
public static bool IsNullOrWhiteSpace ([NotNullWhen(false)] this string? s) => s == null || s.Trim().Length == 0;
|
||||
|
||||
/// <summary>
|
||||
/// Преобразует текстовое имя параметра перечисления <see cref="T"/> в элемент перечисления.
|
||||
/// Если такой элемент не найден или при ошибке перевода вернётся элемент по умолчанию <paramref name="defaultValue"/>.
|
||||
/// </summary>
|
||||
/// <param name="s">Строка</param>
|
||||
/// <param name="defaultValue">Значение по умолчанию</param>
|
||||
/// <typeparam name="T">Тип перечисления</typeparam>
|
||||
/// <returns>Элемент перечисления <see cref="T"/></returns>
|
||||
public static T ParseToEnum<T> (this string s, T defaultValue)
|
||||
{
|
||||
try
|
||||
{
|
||||
return (T)Enum.Parse(typeof(T), s, true);
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
return defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Приводит строку <paramref name="s"/> к виду "Первая буква заглавная, а все остальные -- строчные"
|
||||
/// </summary>
|
||||
/// <param name="s">Строка для перевода</param>
|
||||
/// <returns>Приведённая строка</returns>
|
||||
public static string ToFirstUpperCase (this string s)
|
||||
{
|
||||
// Если строка пуста
|
||||
if (s.IsNullOrWhiteSpace())
|
||||
// - то возвращаю её
|
||||
return s;
|
||||
|
||||
// Задаю результат и устанавливаю первую букву заглавной
|
||||
string result = $"{s[0]}".ToUpper();
|
||||
|
||||
// Если длина s больше, чем 1 символ
|
||||
if (s.Length > 1)
|
||||
// - то добавляю в результат оставшиеся символы, приведя их к LowerCase
|
||||
result += s[1..].ToLower();
|
||||
|
||||
// Вывожу результат
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Трансформация текста <paramref name="s"/> по правилам <paramref name="type"/>
|
||||
/// </summary>
|
||||
/// <param name="s">Текст</param>
|
||||
/// <param name="type">Правила преобразования</param>
|
||||
/// <returns>Преобразованный текст</returns>
|
||||
public static string Transform (this string s, ETextTransform type) =>
|
||||
type switch
|
||||
{
|
||||
ETextTransform.None => s,
|
||||
ETextTransform.LowerCase => s.ToLower(),
|
||||
ETextTransform.UpperCase => s.ToUpper(),
|
||||
ETextTransform.FirstUpper => s.ToFirstUpperCase(),
|
||||
var _ => s
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Форматирует строку <paramref name="s"/>, заменяя все совпадения
|
||||
/// по ключам из <paramref name="replaceList"/> соответствующими значениями из <paramref name="replaceList"/>.
|
||||
/// Т.е. например, исходная строка «Мой дядя #Name был самых честных правил», массив замен содержал строку
|
||||
/// «#Name» => «Юра», в итоге будет «Мой дядя Юра был самых честных правил».
|
||||
/// </summary>
|
||||
/// <param name="s">Строка для замены</param>
|
||||
/// <param name="replaceList">Список замен</param>
|
||||
/// <param name="comparisonType">Региональные параметры, регистр и правила сортировки</param>
|
||||
/// <returns>Заменённая строка</returns>
|
||||
public static string Format (this string s, KeyValueOrderedList<string> replaceList,
|
||||
StringComparison comparisonType = StringComparison.CurrentCulture) => replaceList.Aggregate(s,
|
||||
(current, replaceItem) => current.Replace(replaceItem.Key, replaceItem.Value, comparisonType));
|
||||
}
|
Reference in New Issue
Block a user