Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Tip
Эта статья является частью раздела "Основы" для разработчиков , которые уже знают хотя бы один язык программирования и учат C#. Если вы не знакомы с программированием, сначала начните с учебных пособий по началу работы.
Вы пришли из другого языка? Объединение C# с + параллелями Java и JavaScript. C# добавляет интерполяцию строк ($"{x}"), аналогичную литералам шаблонов JavaScript и Python f-strings, как предпочтительный способ построения строк из переменных. Для построения строк в цикле C# предлагает StringBuilder, подобно StringBuilder в Java.
Объединение добавляет одну строку в конец другой, чтобы создать новую строку. C# предоставляет несколько способов конкатенации строк, и оптимальный выбор зависит от того, объединяете ли вы фиксированный набор значений, коллекцию или собираете строку по частям в цикле.
Сцепляйте строковые литералы
При объединении строковых литералов или констант с помощью + компилятор объединяет их на этапе компиляции. Разделение длинного литерала на несколько строк повышает читабельность исходного кода без каких-либо затрат во время выполнения:
// The compiler joins adjacent string literals at compile time,
// so splitting a long literal across lines has no run-time cost.
string message =
"This is the first sentence of a longer message. " +
"This is the second sentence. " +
"This is the third and final sentence.";
Console.WriteLine(message);
// => This is the first sentence of a longer message. This is the second sentence. This is the third and final sentence.
Использовать операторы + и +=
Чтобы объединить строковые переменные, используйте + оператор для создания новой строки или += добавления к существующей. Оператор + интуитивно понятный, и компилятор копирует строковое содержимое только один раз, даже если вы привязываете несколько операторов в одном выражении:
string name = "Alex";
string day = "Monday";
// Use + to build a string from variables and literals.
string greeting = "Hello " + name + ". Today is " + day + ".";
Console.WriteLine(greeting);
// => Hello Alex. Today is Monday.
// Use += to append to an existing string.
greeting += " How are you today?";
Console.WriteLine(greeting);
// => Hello Alex. Today is Monday. How are you today?
Замечание
В объединениях строк C# обрабатывает null строку так же, как пустую строку, поэтому объединение null не добавляет ничего в результат.
Использование интерполяции строк
Чтобы встраивать вычисляемые выражения в строку, предпочтительнее использовать интерполяцию строк вместо позиционных подстановок, таких как токены {0} и {1}, которые String.Format наследует из форматирования в стиле C. Интерполяция помещает каждое выражение в строку, в которой отображается его значение, поэтому результируемая строка остается удобочитаемой, и аргумент не может быть неправильно указан:
string name = "Alex";
string day = "Monday";
// String interpolation reads better than a chain of + operators.
string greeting = $"Hello {name}. Today is {day}.";
Console.WriteLine(greeting);
// => Hello Alex. Today is Monday.
Когда каждое интерполированное выражение является константной строкой, можно назначить интерполированный результат строке const .
Присоединение к коллекции строк
Чтобы объединить элементы коллекции, используйте String.Concat для объединения их без разделителя или String.Join размещения разделителя между каждым элементом:
string[] words = ["The", "quick", "brown", "fox"];
// Concat joins the sequence with no separator.
string runTogether = string.Concat(words);
Console.WriteLine(runTogether);
// => Thequickbrownfox
// Join places a separator between each element.
string sentence = string.Join(' ', words);
Console.WriteLine(sentence);
// => The quick brown fox
string.Join — это правильное средство, когда требуется вывод с разделителями, например значения с разделителями-запятыми или слова, разделенные пробелами.
Создать строку в цикле
Каждая операция + или += создает новую строку, поскольку строки неизменяемы. Когда вы добавляете много фрагментов в цикле, затраты на выделение памяти накапливаются. Класс StringBuilder создает результат в одном буфере.
// StringBuilder builds a string in place, which suits loops
// that append many pieces.
var builder = new StringBuilder();
for (int i = 1; i <= 3; i++)
{
builder.AppendLine($"Line {i}");
}
Console.Write(builder.ToString());
// => Line 1
// => Line 2
// => Line 3
Используйте StringBuilder, если число элементов велико или неизвестно на этапе компиляции. Для небольшого фиксированного набора значений оператор + и интерполяция строк более понятны. Сведения о том, в каких случаях каждый подход работает лучше всего, см. в разделе Типы string и StringBuilder.