Объединение нескольких строк (руководство по C#)
Конкатенация — это процесс добавления одной строки в конец другой строки. Сцепляйте строки с помощью оператора +
. Для строковых литералов и строковых констант объединение происходит во время компиляции; объединение во время выполнения не происходит. Для строковых переменных объединение происходит только во время выполнения.
Заметка
Примеры C# в этой статье выполняются во встроенном средстве выполнения кода Try.NET и в песочнице. Нажмите кнопку запуска , чтобы запустить пример в интерактивном окне. После выполнения кода его можно изменить и запустить измененный код, выбрав выполнить еще раз. Измененный код выполняется в интерактивном окне или, если компиляция завершается ошибкой, в интерактивном окне отображаются все сообщения об ошибках компилятора C#.
Подсказка
Вы можете использовать помощь ИИ для объединения строк с GitHub Copilot.
Строковые литералы
В следующем примере длинный строковый литерал разбивается на меньшие строки, чтобы повысить читаемость исходного кода. Код объединяет маленькие строки для создания длинной строковой литералы. Части объединяются в одну строку во время компиляции. Нет затрат на производительность во время выполнения независимо от количества участвующих строк.
// Concatenation of literals is performed at compile time, not run time.
string text = "Historically, the world of data and the world of objects " +
"have not been well integrated. Programmers work in C# or Visual Basic " +
"and also in SQL or XQuery. On the one side are concepts such as classes, " +
"objects, fields, inheritance, and .NET Framework APIs. On the other side " +
"are tables, columns, rows, nodes, and separate languages for dealing with " +
"them. Data types often require translation between the two worlds; there are " +
"different standard functions. Because the object world has no notion of query, a " +
"query can only be represented as a string without compile-time type checking or " +
"IntelliSense support in the IDE. Transferring data from SQL tables or XML trees to " +
"objects in memory is often tedious and error-prone.";
System.Console.WriteLine(text);
операторы +
и +=
Для объединения строковых переменных можно использовать операторы +
или +=
, интерпол яцию строк или методы String.Format, String.Concat, String.Join или StringBuilder.Append. Оператор +
прост в использовании и обеспечивает интуитивно понятный код. Даже если в одной инструкции используется несколько операторов +
, содержимое строки копируется только один раз. В следующем коде показаны примеры использования операторов +
и +=
для объединения строк:
string userName = "<Type your name here>";
string dateString = DateTime.Today.ToShortDateString();
// Use the + and += operators for one-time concatenations.
string str = "Hello " + userName + ". Today is " + dateString + ".";
System.Console.WriteLine(str);
str += " How are you today?";
System.Console.WriteLine(str);
Интерполяция строк
В некоторых выражениях проще объединить строки с помощью интерполяции строк, как показано в следующем коде:
string userName = "<Type your name here>";
string date = DateTime.Today.ToShortDateString();
// Use string interpolation to concatenate strings.
string str = $"Hello {userName}. Today is {date}.";
System.Console.WriteLine(str);
str = $"{str} How are you today?";
System.Console.WriteLine(str);
Заметка
В операциях объединения строк компилятор C# обрабатывает пустую строку так же, как пустую строку.
Интерполяция строк позволяет инициализировать константную строку, если все выражения, используемые для заполнителей, также являются константными строками.
String.Format
Другим методом объединения строк является String.Format. Этот метод хорошо работает при создании строки из небольшого количества строк компонентов.
StringBuilder
В других случаях вы можете объединить строки в цикле, где вы не знаете, сколько исходных строк вы объединяете, и фактическое количество исходных строк может быть большим. Класс StringBuilder был разработан для этих сценариев. Следующий код использует метод Append класса StringBuilder для объединения строк.
// Use StringBuilder for concatenation in tight loops.
var sb = new System.Text.StringBuilder();
for (int i = 0; i < 20; i++)
{
sb.AppendLine(i.ToString());
}
System.Console.WriteLine(sb.ToString());
Дополнительные сведения о причинах выбора объединения строк или о классе StringBuilder
.
String.Concat
или String.Join
Другим вариантом объединения строк из коллекции является использование метода String.Concat. Используйте метод String.Join, если разделитель должен разделить исходные строки. Следующий код объединяет массив слов с помощью обоих методов:
string[] words = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog." };
var unreadablePhrase = string.Concat(words);
System.Console.WriteLine(unreadablePhrase);
var readablePhrase = string.Join(" ", words);
System.Console.WriteLine(readablePhrase);
LINQ и Enumerable.Aggregate
Наконец, можно использовать LINQ и метод Enumerable.Aggregate для объединения строк из коллекции. Этот метод объединяет исходные строки с помощью лямбда-выражения. Лямбда-выражение выполняет работу, чтобы добавить каждую строку в существующее накопление. Следующий пример объединяет массив слов, добавляя пробел между каждым словом в массиве:
string[] words = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog." };
var phrase = words.Aggregate((partialPhrase, word) =>$"{partialPhrase} {word}");
System.Console.WriteLine(phrase);
Этот параметр может привести к большему количеству выделений, чем другие методы объединения коллекций, так как он создает промежуточную строку для каждой итерации. Если оптимизация производительности важна, рассмотрите класс StringBuilder
или метод String.Concat
или String.Join
для объединения коллекции вместо Enumerable.Aggregate
.
Использование GitHub Copilot для объединения строк
Вы можете использовать GitHub Copilot в интегрированной среде разработки для создания кода C# для объединения нескольких строк. Вы можете настроить запрос, чтобы указать строки и метод для использования в соответствии с вашими требованиями.
В следующем тексте показан пример запроса для Copilot Chat:
Generate C# code to use String.Format to build an output string "Hi x, today's date is y. You are z years old." where x is "John", y is today's date and z is the birthdate January 1, 2000. The final string should show date in the full format mm/dd/yyyy. Show output.
GitHub Copilot работает на ИИ, поэтому возможны неожиданности и ошибки. Дополнительные сведения см. в часто задаваемых вопросах Copilot .
Дополнительные сведения о GitHub Copilot в Visual Studio и GitHub Copilot в VS Code.