Procedimiento para concatenar varias cadenas (Guía de C#)

Concatenación es el proceso de anexar una cadena al final de otra cadena. Las cadenas se concatenan con el operador +. En el caso de los literales y las constantes de cadena, la concatenación se produce en tiempo de compilación, y no en tiempo de ejecución. En cambio, para las variables de cadena, la concatenación solo se produce en tiempo de ejecución.

Nota:

Los ejemplos de C# de este artículo se ejecutan en el ejecutor de código en línea y área de juegos de Try.NET. Haga clic en el botón Ejecutar para ejecutar un ejemplo en una ventana interactiva. Una vez que se ejecuta el código, puede modificar y ejecutar el código modificado si vuelve a hacer clic en Ejecutar. El código modificado se ejecuta en la ventana interactiva o, si se produce un error en la compilación, en la ventana interactiva se muestran todos los mensajes de error del compilador de C#.

Literales de cadena

En el ejemplo siguiente se divide un literal de cadena larga en cadenas más pequeñas para mejorar la legibilidad en el código fuente. El código concatena las cadenas más pequeñas para crear el literal de cadena larga. Los elementos se concatenan en una sola cadena en tiempo de compilación. No existe ningún costo de rendimiento en tiempo de ejecución independientemente del número de cadenas implicadas.

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

Operadores + y +=

Para concatenar variables de cadena, puede usar los operadores + o +=, la interpolación de cadena o los métodos String.Format, String.Concat, String.Join o StringBuilder.Append. El operador + es sencillo de usar y genera un código intuitivo. Aunque use varios operadores + en una instrucción, el contenido de la cadena se copiará solo una vez. En el código siguiente se muestran ejemplos del uso de los operadores + y += para concatenar cadenas:

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

Interpolación de cadenas

En algunas expresiones, es más fácil concatenar cadenas mediante la interpolación de cadena, como se muestra en este código:

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:

En operaciones de concatenación de cadenas, el compilador de C# trata una cadena NULL igual que una cadena vacía.

A partir de C# 10, se puede utilizar la interpolación de cadenas para inicializar una cadena constante cuando todas las expresiones utilizadas para los marcadores de posición son también cadenas constantes.

String.Format

Otro método para concatenar cadenas es String.Format. Este método funciona bien cuando se crea una cadena a partir de un número reducido de cadenas de componente.

StringBuilder

En otros casos, puede combinar cadenas en un bucle, donde no sabe cuántas cadenas de origen se combinan, y el número real de cadenas de origen puede ser elevado. La clase StringBuilder se diseñó para estos escenarios. El código siguiente usa el método Append de la clase StringBuilder para concatenar cadenas.

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

Puede obtener más información sobre las razones para elegir la concatenación de cadenas o sobre la clase StringBuilder.

String.Concat o String.Join

Otra opción para combinar cadenas a partir de una colección consiste en usar el método String.Concat. Use el método String.Join si un delimitador debe separar cadenas de origen. El código siguiente combina una matriz de palabras usando ambos 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 y Enumerable.Aggregate

Por último, puede usar LINQ y el método Enumerable.Aggregate para combinar cadenas a partir de una colección. Este método combina las cadenas de origen mediante una expresión lambda. La expresión lambda realiza el trabajo de agregar cada cadena a la acumulación existente. En el ejemplo siguiente se combina una matriz de palabras y se agrega un espacio entre cada palabra de la matriz:

string[] words = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog." };

var phrase = words.Aggregate((partialPhrase, word) =>$"{partialPhrase} {word}");
System.Console.WriteLine(phrase);

Esta opción puede provocar más asignaciones que otros métodos para concatenar colecciones, ya que crea una cadena intermedia para cada iteración. Si la optimización del rendimiento es fundamental, considere la clase StringBuilder o los métodos String.Concat o String.Join para concatenar una colección, en vez de Enumerable.Aggregate.

Vea también