Concatenar cadeias em C#

Sugestão

Este artigo faz parte da secção Fundamentos para programadores que já conhecem pelo menos uma linguagem de programação e estão a aprender C#. Se és novo na programação, começa primeiro pelos tutoriais para começar .

Vem de outra língua? A concatenação em C# com + é semelhante à de Java e JavaScript. C# adiciona interpolação de strings ($"{x}"), semelhante aos literais de modelo do JavaScript e às f-strings do Python, como a forma preferida de construir strings a partir de variáveis. Para construir cadeias em ciclo, C# oferece StringBuilder, muito semelhante ao StringBuilderdo Java .

A concatenação adiciona uma cadeia à extremidade de outra para produzir uma nova cadeia. C# dá-te várias formas de concatenar, e a melhor escolha depende se estás a juntar um conjunto fixo de valores ou uma coleção, ou se estás a construir uma string peça a peça num ciclo.

Concatenar literais de cadeias de caracteres

Quando se concatenam literais ou constantes de cadeias de caracteres com +, o compilador concatena-os em tempo de compilação. Dividir um literal longo por várias linhas melhora a legibilidade no código-fonte sem qualquer custo em tempo de execução:

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

Utilizar os operadores + e +=

Para combinar variáveis de cadeia, use o + operador para produzir uma nova cadeia ou += para adicionar a uma já existente. O + operador é intuitivo, e o compilador copia o conteúdo da cadeia apenas uma vez, mesmo quando encadeia vários operadores numa única expressão:

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?

Observação

Na concatenação de cadeias, C# trata uma null cadeia da mesma forma que uma cadeia vazia, por isso a concatenação null não acrescenta nada ao resultado.

Usar interpolação de cordas

Para incorporar expressões computadas numa string, prefira interpolação de strings em vez de marcadores posicionais, como os tokens {0} e {1}, que String.Format herda da formatação ao estilo C. A interpolação coloca cada expressão em linha onde o seu valor aparece, para que a cadeia de resultados se mantenha legível e não se possa desalinhar um argumento:

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.

Quando toda expressão interpolada é ela própria uma cadeia constante, pode-se atribuir o resultado interpolado a uma const cadeia.

Junte-se a uma coleção de cadeias de caracteres

Para combinar os elementos de uma coleção, use String.Concat para os unir sem separador, ou String.Join para colocar um separador entre cada elemento:

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 é a ferramenta certa sempre que precisa de saída delimitada, como valores separados por vírgulas ou palavras separadas por espaço.

Constrói uma corda num laço

Cada operação + ou += cria uma nova string, uma vez que as strings são imutáveis. Quando se acrescentam muitos fragmentos num ciclo, essa alocação vai-se acumulando. A StringBuilder classe constrói o resultado num único buffer:

// 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

Procure StringBuilder quando o número de peças for grande ou desconhecido no momento da compilação. Para um conjunto fixo e pequeno de valores, o operador + e a interpolação de cadeias de caracteres são mais claros. Para orientações sobre quando cada abordagem funciona melhor, veja Os tipos string e StringBuilder.

Consulte também