C# 1001 notes
6.51K subscribers
329 photos
9 videos
2 files
313 links
Регулярные короткие заметки по C# и .NET.

Просто о сложном для каждого.

admin - @haarrp
加入频道
Форматирование и составные строки в C#?

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

Чаще всего нам в этом помогает string.Format, принимающий шаблон строки и аргументы для подстановки.

Форматирование составных строк и доступные шаблоны темы достаточно обширные, поэтому я о них ещё напишу. А сейчас стоит упомяну лишь некоторые из их возможностей:

🔸 Подстановка

Использования индексов в фигурных скобках для позиционирования аргумента в итоговой строке:

string name = "C# channel";
int age = 1;
string res = string.Format("{0} is {1} yrs old.", name, age);

// Output:
// C# channel is 1 yrs old.


🔸 Форматирование

C2 как пример денежного формата:

decimal value = 123.456m;
Console.WriteLine("Your account balance is {0:C2}.", value);

// Output:
// Your account balance is $123.46.


🔥 Выравнивание

Указывая целочисленные значения после запятой мы можем задавать как отступы, так и выравнивание по левому/правому краям.

Console.WriteLine("{0,-20} {1,5}\n", "Name", "Hours");


Результат выполнения.

#strings
Использование массива параметров при форматировании строки в C#?

В том случае, когда список параметров для форматирования строки у нас достаточно длинный, или же он формируется динамически во время выполнения программы, мы можем воспользоваться одной из перегрузок метода string.Format, принимающей object[] args.

Сделать это можно следующим образом:

object[] args = { "London", 2017, 8825000 };
string res = string.Format("{0}'s population in {1} is {2:0,0}.", args);


Результат выполнения:

London's population in 2017 is 8.825.000.


Знали ли вы, что с помощью поля Console.Title вы можете изменять имя окна вашего консольного приложения и даже сделать его анимированным? 😀

#strings
Какие методы поддерживают форматирование составных строк в C#?

Ранее я уже упоминал, что одним из основных способов форматирования строк является использование метода string.Format, однако в платформе .NET он далеко не единственный.

Сегодня я приведу расширенный список, поддерживающий данную функциональность:

🔸 Console.Write / Console.WriteLine

🔸 Debug.WriteLine

🔸 StreamWriter.Write / StreamWriter.WriteLine

🔸 StringBuilder.AppendFormat

🔸 StringWriter.Write / StringWriter.WriteLine

🔸 TextWriter.Write / TextWriter.WriteLine

🔸 Trace.TraceError / Trace.TraceInformation

Другими словами, следующая строка:

string.Format("{0} is {1} yrs old.", name, age);


Может быть переписана следующим образом:

Console.Write("{0} is {1} yrs old.", name, age);


Минутка занимательных наблюдений: Размер окна консольного приложения, оказывается, также может изменяться во время исполнения с помощью метода Console.SetWindowSize(w, h) 🙂

#strings
​​Parse чисел в C#

Каждый числовый тип в C# содержит метод Parse, с помощью которого мы можем преобразовывать строки в соответствующие числовые значения:

byte b1 = byte.Parse("200");
sbyte sb1 = sbyte.Parse("-100");
float f1 = float.Parse("1.2e-4");


Однако, важно отметить, что результат выполнения этого метода может обернуться для нас и следующими исключениями:

🔸 FormatException:

int n1 = int.Parse("3.4");    // FormatException


В этом примере мы пробуем привести (распарсить) дробное значение к типу int, в результате чего получаем исключение о некорректности формата входного параметра 3.4.

🔸 OverflowException:

uint ui1 = uint.Parse("-1");  // OverflowException


В данном случае мы пытаемся привести отрицательное число к типу uint, значения которого могут быть только положительными. Как итог - исключение, сигнализирующее о переполнении.

💬 Одним из полезных атрибутов, помогающем как в документации, так и в контроле поведения, является ObsoleteAttribute. С его помощью мы можем помечать элементы программы, которые больше не должны использоваться и вскоре могут быть удалены. Обычно мы получаем предупреждение, однако, знали ли вы, что это поведение настраиваемое и мы можем даже возвращать полноценную ошибку компиляции 🙂?

#strings
Конкатена́ция строк в C#

В C# мы можем использовать оператор + не только для сложения чисел, но и склеивания (конкатенации) строк:

string s1 = "C#";
string s2 = "fun";
string s3 = s1 + " is " + s2; // "C# is fun"


Мы можем использовать этот оператор неограниченное количество раз в рамках одного выражения (expression), а само выражение использовать в тех местах кода, где ожидается строка:

string s1 = "Hello " + " Wor" + "ld";
Console.WriteLine("Wish " + "you " + "the best");


Более того, специальные методы String.Concat и String.Format содержат дополнительные перегрузки, которые также могут быть использованы для конкатенации:

// Concat method
string s4 = String.Concat(new object[] {
"The ", 3, " musketeers"
});

string s5 = String.Concat("This", "That");

// Use String.Format to concatenate
string s6 = string.Format("{0}{1}{2}", s1, " is ", s2);


💬 Продолжая рассказывать про полезные фичи в C# нельзя не упомянуть coalesce оператор ??. Принцип его работы прост- возвращать left-hand операнд если он не null и right-hand в обратном случае: int y = x ?? -1. Берите на вооружение 😉

#strings