Concatenar cadenas en C#

Tip

Este artículo forma parte de la sección Aspectos básicos de los desarrolladores que ya conocen al menos un lenguaje de programación y están aprendiendo C#. Si no está familiarizado con la programación, comience primero con los tutoriales de introducción .

¿Viene de otro idioma? La concatenación en C# con + es similar a la de Java y JavaScript. C# añade la interpolación de cadenas ($"{x}"), similar a los literales de plantilla de JavaScript y a las cadenas f de Python, como el método preferido para crear cadenas a partir de variables. Para compilar cadenas en un bucle, C# ofrece StringBuilder, de forma muy similar a la de StringBuilderJava .

La concatenación anexa una cadena al final de otra para generar una nueva cadena. C# proporciona varias formas de concatenar, y la mejor opción depende de si se van a unir un conjunto fijo de valores o una colección, o de si se crea una cadena poco a poco en un bucle.

Concatenar literales de texto

Al concatenar literales o constantes de cadena con +, el compilador los combina en tiempo de compilación. Dividir un literal largo entre varias líneas mejora la legibilidad en el origen sin ningún costo en tiempo de ejecución:

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

Use los operadores + y +=

Para combinar variables de cadena, use el + operador para generar una nueva cadena o += para anexar a una existente. El + operador es intuitivo y el compilador copia el contenido de la cadena solo una vez incluso cuando se encadenan varios operadores en una sola expresión:

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?

Note

En la concatenación de cadenas, C# trata una null cadena igual que una cadena vacía, por lo que la concatenación null no agrega nada al resultado.

Uso de la interpolación de cadenas

Para insertar expresiones calculadas en una cadena, prefiera la interpolación de cadenas sobre los marcadores de posición posicionales, como los {0} tokens y {1} que String.Format heredan del formato de estilo C. La interpolación coloca cada expresión en línea donde aparece su valor, por lo que la cadena resultante sigue siendo legible y no puedes descolocar un 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.

Cuando cada expresión interpolada es una cadena constante, puede asignar el resultado interpolado a una const cadena.

Unir una colección de cadenas

Para combinar los elementos de una colección, use String.Concat para combinarlos sin separador o String.Join para colocar un 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 es la herramienta correcta siempre que necesite salida delimitada, como valores separados por comas o palabras separadas por espacios.

Creación de una cadena en un bucle

Cada + operación o += crea una nueva cadena, ya que las cadenas son inmutables. Cuando añades muchos fragmentos en un bucle, esa asignación acaba acumulándose. La StringBuilder clase compila el resultado en un único búfer en su lugar:

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

Recurra a StringBuilder cuando el número de elementos sea grande o se desconozca en tiempo de compilación. Para un conjunto fijo y pequeño de valores, el operador + y la interpolación de cadenas son más claros. Para obtener orientación sobre cuándo funciona mejor cada enfoque, consulte Los tipos string y StringBuilder.

Consulte también