Форматирование и составные строки в C#?
В процессе разработки мы довольно часто сталкиваемся с необходимостью использования комбинированных из разных частей строк.
Чаще всего нам в этом помогает string.Format, принимающий шаблон строки и аргументы для подстановки.
Форматирование составных строк и доступные шаблоны темы достаточно обширные, поэтому я о них ещё напишу. А сейчас стоит упомяну лишь некоторые из их возможностей:
🔸 Подстановка
Использования индексов в фигурных скобках для позиционирования аргумента в итоговой строке:
🔸 Форматирование
🔥 Выравнивание
Указывая целочисленные значения после запятой мы можем задавать как отступы, так и выравнивание по левому/правому краям.
Результат выполнения.
#strings
В процессе разработки мы довольно часто сталкиваемся с необходимостью использования комбинированных из разных частей строк.
Чаще всего нам в этом помогает 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
Telegraph
String format: alignment
Использование массива параметров при форматировании строки в C#?
В том случае, когда список параметров для форматирования строки у нас достаточно длинный, или же он формируется динамически во время выполнения программы, мы можем воспользоваться одной из перегрузок метода string.Format, принимающей
Сделать это можно следующим образом:
Результат выполнения:
❓ Знали ли вы, что с помощью поля
#strings
В том случае, когда список параметров для форматирования строки у нас достаточно длинный, или же он формируется динамически во время выполнения программы, мы можем воспользоваться одной из перегрузок метода 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
Telegraph
C# animated console title
static void Main(string[] args) { string Progresbar = "This is animated title of Console"; var title = ""; while (true) { for (int i = 0; i < Progresbar.Length; i++) { title += Progresbar[i]; Console.Title = title; Thread.Sleep(100);…
Какие методы поддерживают форматирование составных строк в 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
Другими словами, следующая строка:
Может быть переписана следующим образом:
❓ Минутка занимательных наблюдений: Размер окна консольного приложения, оказывается, также может изменяться во время исполнения с помощью метода
#strings
Ранее я уже упоминал, что одним из основных способов форматирования строк является использование метода 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
Telegraph
Change Console Window size
for (int i = 1; i < 40; i++) { Console.SetWindowSize(i, i); System.Threading.Thread.Sleep(50); }
Parse чисел в C#
Каждый числовый тип в C# содержит метод
Однако, важно отметить, что результат выполнения этого метода может обернуться для нас и следующими исключениями:
🔸 FormatException:
В этом примере мы пробуем привести (распарсить) дробное значение к типу
🔸 OverflowException:
В данном случае мы пытаемся привести отрицательное число к типу
💬 Одним из полезных атрибутов, помогающем как в документации, так и в контроле поведения, является
#strings
Каждый числовый тип в 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# мы можем использовать оператор
Мы можем использовать этот оператор неограниченное количество раз в рамках одного выражения (expression), а само выражение использовать в тех местах кода, где ожидается строка:
Более того, специальные методы String.Concat и String.Format содержат дополнительные перегрузки, которые также могут быть использованы для конкатенации:
💬 Продолжая рассказывать про полезные фичи в C# нельзя не упомянуть coalesce оператор
#strings
В 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