На этот раз я познакомлю вас с довольно «крутой» библиотекой. Эта библиотека называется Humanizer. У него только одна функция: преобразовывать строки, даты,… в слова, которые люди могут прочитать (поскольку название Humanizer означает «персонификация»). Звучит просто, но вы будете поражены его функциями.

Статья только ознакомительная, вводная, поэтому кода много не будет. Если вам интересно, вы можете создать новый проект, используя Nuget, чтобы установить Humanizer и протестировать код. Некоторые характерные особенности Humanizer.

Преобразование имен функций и имен переменных в понятные строки

В программировании мы часто называем поле, имя функции, имя переменной в соответствии с соглашением об именах. Humanizer позволяет превратить эти имена в смысловую строку.

"PascalCaseInputStringIsTurnedIntoSentence".Humanize();
//"Pascal case input string is turned into sentence
"Underscored_input_string_is_turned_into_sentence".Humanize();
//"Underscored input string is turned into sentence
"Underscored_input_String_is_turned_INTO_sentence".Humanize();
//Underscored input String is turned INTO sentence

Можно преобразовать строку в верхний регистр, нижний регистр, верхний регистр, первую букву:

"Sentence casing".Transform(To.LowerCase);//sentence casing
"Sentence casing".Transform(To.SentenceCase); //Sentence casing
"Sentence casing".Transform(To.TitleCase); //Sentence Casing
"Sentence casing".Transform(To.UpperCase); //SENTENCE CASING

Свернуть строку

Чтобы отобразить длинную информацию, мы обычно пишем функцию, чтобы обрезать строку, а затем заканчивать ее… В Humanizer есть встроенная функция, которая поддерживает это. Мы также можем сократить количество символов или слов

"Long text to truncate".Truncate(10, Truncator.FixedLength); 
//Cut 10 characters 
//Long text…
"Long text to truncate".Truncate(2, Truncator.FixedNumberOfWords); //Cut 2 characters
//Long text…

Преобразование перечисления в осмысленную строку

В некоторых длинных перечислениях мы часто используем аннотации, чтобы преобразовать их в значимую строку. Humanizer справляется с этим очень легко.

public enum EnumUnderTest
{
     [Description (Custom description)]
     MemberWithDescriptionAttribute,
     MemberWithoutDescriptionAttribute,
}
 
// If DescriptionAttribute, read the word Attribute
EnumUnderTest.MemberWithDescriptionAttribute.Humanize (); // Custom description
// If not, convert enum to string
EnumUnderTest.MemberWithoutDescriptionAttribute.Humanize (); // Member without description attribute

Обработка DateTime

Вы хотите выполнить функцию расчета времени публикации комментариев, например, в Facebook (1 час назад, 2 часа назад и т. Д.).

Thread.CurrentThread.CurrentUICulture = new CultureInfo ("en-VN"); // Set Vietnamese language
 
DateTime.UtcNow.AddHours (-30) .Humanize (); // "yesterday
DateTime.UtcNow.AddHours (-60) .Humanize (); //"2 days ago
 
DateTime.UtcNow.AddHours (2) .Humanize (); // 2 hours
DateTime.UtcNow.AddDays (1) .Humanize (); //Tomorrow

Обработка TimeSpan

Функция обработки TimeSpan аналогична, и английский, и вьетнамский работают очень хорошо.

TimeSpan.FromMilliseconds(2).Humanize(); //2 milliseconds
TimeSpan.FromDays(1).Humanize(); //1 day
TimeSpan.FromDays(16).Humanize(); //2 weeks
 
// By default, the Humanize () function will give the largest unit (year-> month -> ...).
// We pass more parameters to display the smaller units
TimeSpan.FromMilliseconds(1299630020).Humanize(); //2 weeks
TimeSpan.FromMilliseconds(1299630020).Humanize(3); //2 weeks, 1 day, 1 hour
TimeSpan.FromMilliseconds(1299630020).Humanize(4); //2 weeks, 1 day, 1 hour, 30 seconds

Преобразование чисел в слова (только на английском языке)

1.ToWords(); //one
10.ToWords(); //ten
11.ToWords(); //eleven
122.ToWords(); //one hundred and twenty-two
3501.ToWords(); //three thousand five hundred and one

Размер обрабатываемого файла (неплохо)

Humanizer позволяет легко обрабатывать данные, относящиеся к размеру файла (КБ, МБ, ГБ,…):

var fileSize = (10).Kilobytes();
fileSize.Bits      => 81920
fileSize.Bytes     => 10240
fileSize.Kilobytes => 10
// We can add and subtract file size
var total = (10).Gigabytes() + (512).Megabytes() - (2.5).Gigabytes();
// Display as text
7.Bits().ToString();        // 7 b
8.Bits().ToString();        // 1 B
(.5).Kilobytes().Humanize();  // 512 B
(1000).Kilobytes().ToString(); // 1000 KB
(1024).Kilobytes().Humanize(); // 1 MB
// Parse backwards from the text (Not case sensitive)
ByteSize.Parse("1.55 mB");
ByteSize.Parse("1.55 mb");
ByteSize.Parse("1.55 GB");
ByteSize.Parse("1.55 gB");
ByteSize.Parse("1.55 gb");
ByteSize.Parse("1.55 TB");

В рамках этой статьи я только что представил некоторые выдающиеся возможности Humanizer. Вы можете узнать больше здесь: https://github.com/MehdiK/Humanizer.

Еще увидимся.