Partilhar via


Como concatenar várias cadeias de caracteres (Guia C#)

de 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.

Observação

Os exemplos de C# neste artigo são executados no Try.NET executor de código em linha e no 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 cadeia de caracteres

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 strings 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 + ou +=, de interpolação de cadeia de caracteres ou os métodos String.Format, String.Concat, String.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 cordas

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);

Observação

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.

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 são cadeias de caracteres constantes.

String.Format

Outro método para concatenar cadeias de caracteres é 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 classe StringBuilder foi projetada para esses cenários. O código a seguir usa o método Append da classe StringBuilder para concatenar cadeias de 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 strings ou a classe StringBuilder.

String.Concat ou String.Join

Outra opção para unir cadeias de caracteres de uma coleção é usar String.Concat método. Utilize o método String.Join se um delimitador deve separar sequências 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 LINQ e o método Enumerable.Aggregate 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 classe StringBuilder ou o método String.Concat ou String.Join para concatenar uma coleção, em vez de Enumerable.Aggregate.

Ver também