TOC

This article has been localized into Russian by the community.

Операторы:

Оператор Интерполяции Строк

В других разделах этого руководства вы найдете подробное описание типа данных string, поскольку работа с текстом является очень важной задачей. В этой статье мы сосредоточимся на специальном операторе для работы со строками, позволяющем делать довольно много дополнительных трюков при объявлении строк. Она называется интерполяцией строк (введена в C# 6.0) и позволяет размещать в строке специальные маркеры, которые интерпретатор впоследствии заменит соответствующими значениями. Он работает так же, как строка.Метод Format () мы уже обсуждали, но синтаксис более читабельный и удобный.

Интерполяция строки может быть достигнута очень легко - просто префикс строки с символом$. Как всегда, сразу перейдем к примеру:

string name = "John Doe";
int age = 42;

Console.WriteLine(name + " is " + age + " years old");
Console.WriteLine($"{name} is {age} years old");

В последних двух строках мы делаем то же самое: сначала традиционным способом, где мы соединяем строку, используя наши две переменные, а затем используя интерполяцию строк. Обратите внимание, как он позволяет вводить переменные непосредственно в строку, окружая ее фигурными скобками. И даже если это происходит внутри строки, компилятор будет проверять переменные, которые вы пытаетесь ввести!

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

var user = new
{
    Name = "John Doe",
    Age = 42
};
Console.WriteLine($"{user.Name} is {user.Age} years old");

Строки форматирования

По умолчанию переменные строки будут включены в представленную строку путем вызова на них метода tostring(). Но иногда вы можете искать немного большего контроля над тем, как отображается каждая переменная, и, к счастью, это очень просто сделать, благодаря строкам форматирования. Просто поместите двоеточие (:) после переменной, а затем введите строку форматирования, которая будет использоваться, как в этом примере:

double daysSinceMillenium = (DateTime.Now - new DateTime(2000, 1, 1)).TotalDays;  
Console.WriteLine($"Today is {DateTime.Now:d} and {daysSinceMillenium:N2} days have passed since the last millennium!");

Результат будет чем-то вроде этого, в зависимости от установок вашей системы для дат и чисел:

Today is Friday, June 29, 2018 and 6,754.49 days have passed since the last millenium!

Обратите внимание, что дата представлена в длинном формате даты (как указано в строке формата "D"), а число красиво отформатировано с тысячами разделителей и двумя десятичными числами благодаря строке числового формата "N2".

Если вам нужен больший контроль, вы можете менять формат строк от значения по умолчанию до пользовательского, например, дату:

Console.WriteLine($"Today is {DateTime.Now:yyyy-MM-dd}");

Существует гораздо больше способов форматирования ДатыВремени, которые вы можете использовать во вставленной строке. Для ознакомления , пожалуйста, проконсультируйтесь на documentation.

За рамками переменных

Теперь мы включили переменные и даже свойства объектов в наши строки, и мы видели, как легко мы можем отформатировать полученные строки. Но интерполяция строк выходит за рамки этого, потому что вы можете иметь целые выражения C# внутри строк, если они приводят к чему-то, что может быть добавлено к строке. Отличным примером этого является классическая"с или без концовкой а " - ситуация, когда вам нужно создать строку либо "1 год" или "2 года". Это можно сделать непосредственно с помощью интерполяции строк, просто используя тернарный оператор внутри строки:

string name = "John Doe";
int age = 42;

Console.WriteLine($"{name} is {age} year{(age == 1 ? "" : "s")} old");

Обратите внимание, как я вставил простой оператор if-then-else в строку внутри набора скобок. Мы можем сделать это, потому что результатом выражения является строка-либо пустая, либо "а". Вы также можете сделать расчеты:

Console.WriteLine($"5 + 5 * 2 = {((5 + 5) * 2)}");

Опять же, пока результат выражения можно преобразовать в строку, его можно использовать в объединенной строке.

Объединение строк & исключение из них

Вы не будете работать с объединением строк до того, как на ум придет очень очевидный вопрос: Как я могу включать в строку символы, которые имеют конкретное значение, например, фигурные скобки, и обрабатывать их буквально? Ответ на это обычно исключение - добавление символа префикса / постфикса к другим символам, чтобы обнулить конкретную цель. Это верно и для интерполяции строк, где фигурные скобки должны быть записаны дважды, если вы хотите, чтобы они обрабатывались буквально, как то:

Console.WriteLine($"Insert {name} between curly braces: {{name here}}");

Результат:

Insert John Doe between curly braces: {name here}

Резюме

Если вы когда-либо смотрели на классическую конкатенацию строк и считали ее слишком неуклюжей, вам понравится интерполяция строк! Он был представлен в C# версии 6.0 и позволяет писать текст, который включает переменные в очень естественном и удобном для чтения виде. Они также очень хороши, позволяя вам интегрировать выражения непосредственно в строки, но будьте осторожны - в определенный момент ваша интерполированная строка может быть настолько полной, что ее станет труднее читать, чем другие.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!