Como concatenar várias cadeias de caracteres (Guia C#)
Concatenação é o processo de acrescentar uma cadeia de caracteres ao final de outra cadeia de caracteres. Você concatena cadeias de caracteres usando o +
operador . Para literais de cadeia de caracteres e constantes de cadeia de caracteres, a concatenação ocorre em tempo de compilação; Não ocorre concatenação em tempo de execução. Para variáveis de cadeia de caracteres, a concatenação ocorre somente em tempo de execução.
Nota
Os exemplos de C# neste artigo são executados no Try.NET corredor de código embutido e playground. Selecione o botão Executar para executar um exemplo em uma janela interativa. Depois de executar o código, você pode modificá-lo e executar o código modificado selecionando Executar novamente. O código modificado é executado na janela interativa ou, se a compilação falhar, a janela interativa exibe todas as mensagens de erro do compilador C#.
Literais de cadeias
O exemplo a seguir divide um literal de cadeia de caracteres longa em cadeias de caracteres menores para melhorar a legibilidade no código-fonte. O código concatena as cadeias de caracteres menores para criar a cadeia de caracteres longa literal. As partes são concatenadas em uma única string em tempo de compilação. Não há custo de desempenho em tempo de execução, independentemente do número de cadeias de caracteres envolvidas.
// 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);
+
e +=
operadores
Para concatenar variáveis de cadeia de caracteres, você pode usar os +
operadores or+=
, interpolação de cadeia de caracteres ou os String.Formatmétodos , String.ConcatString.Join , ou StringBuilder.Append . O +
operador é fácil de usar e cria um código intuitivo. Mesmo se você usar vários +
operadores em uma instrução, o conteúdo da cadeia de caracteres será copiado apenas uma vez. O código a seguir mostra exemplos de uso dos +
operadores e +=
para concatenar cadeias de caracteres:
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);
Interpolação de cadeias
Em algumas expressões, é mais fácil concatenar cadeias de caracteres usando interpolação de cadeia de caracteres, como mostra o código a seguir:
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);
Nota
Em operações de concatenação de cadeia de caracteres, o compilador C# trata uma cadeia de caracteres nula da mesma forma que uma cadeia de caracteres vazia.
A partir do C# 10, você pode usar a interpolação de cadeia de caracteres para inicializar uma cadeia de caracteres constante quando todas as expressões usadas para espaços reservados também forem cadeias de caracteres constantes.
String.Format
Outro método para concatenar strings é String.Format. Esse método funciona bem quando você está criando uma cadeia de caracteres a partir de um pequeno número de cadeias de caracteres de componentes.
StringBuilder
Em outros casos, você pode estar combinando cadeias de caracteres em um loop em que não sabe quantas cadeias de caracteres de origem está combinando, e o número real de cadeias de caracteres de origem pode ser grande. A StringBuilder classe foi projetada para esses cenários. O código a seguir usa o Append método da classe para concatenar cadeias de StringBuilder caracteres.
// 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());
Você pode ler mais sobre os motivos para escolher a concatenação de cadeia de caracteres ou a StringBuilder
classe.
String.Concat
ou String.Join
Outra opção para unir cadeias de caracteres de uma coleção é usar String.Concat o método. Use String.Join o método se um delimitador deve separar cadeias de caracteres de origem. O código a seguir combina uma matriz de palavras usando ambos os métodos:
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 e Enumerable.Aggregate
Por fim, você pode usar o LINQ e o Enumerable.Aggregate método para unir cadeias de caracteres de uma coleção. Esse método combina as cadeias de caracteres de origem usando uma expressão lambda. A expressão lambda faz o trabalho de adicionar cada cadeia de caracteres à acumulação existente. O exemplo a seguir combina uma matriz de palavras, adicionando um espaço entre cada palavra na matriz:
string[] words = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog." };
var phrase = words.Aggregate((partialPhrase, word) =>$"{partialPhrase} {word}");
System.Console.WriteLine(phrase);
Essa opção pode causar mais alocações do que outros métodos para concatenar coleções, pois cria uma cadeia de caracteres intermediária para cada iteração. Se a otimização do desempenho for crítica, considere a StringBuilder
classe ou oString.Concat
método ou String.Join
para concatenar uma coleção, em vez de Enumerable.Aggregate
.