Compartir a través de


Cómo concatenar varias cadenas (Guía de C#)

La concatenación es el proceso de agregar una cadena al final de otra cadena. Las cadenas se concatenan mediante el operador +. Para literales de cadena y constantes de cadena, la concatenación se produce en tiempo de compilación; no se produce ninguna concatenación en tiempo de ejecución. En el caso de 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 Try.NET ejecutor de código en línea y entorno de pruebas. Seleccione el botón Ejecutar para ejecutar un ejemplo en una ventana interactiva. Una vez ejecutado el código, puede modificarlo y ejecutar el código modificado seleccionando Ejecutar de nuevo. El código modificado se ejecuta en la ventana interactiva o, si se produce un error en la compilación, la ventana interactiva muestra 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 hay 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 +=, interpolación de cadenas o los métodos String.Format, String.Concat, String.Join o StringBuilder.Append. El operador + es fácil de usar y hace que el código sea intuitivo. Incluso si usa varios operadores de + en una instrucción, el contenido de la cadena solo se copia una vez. En el código siguiente se muestran ejemplos de 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 interpolación de cadenas, como se muestra en el código siguiente:

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 las operaciones de concatenación de cadenas, el compilador de C# trata una cadena nula igual que una cadena vacía.

Puede usar la interpolación de cadenas para inicializar una cadena constante cuando todas las expresiones usadas para los marcadores de posición también son 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 pequeño número de cadenas de componentes.

StringBuilder

En otros casos, es posible que esté combinando cadenas en un bucle en el que no sepa cuántas cadenas de origen está combinando y el número real de cadenas de origen puede ser grande. 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 de una colección es usar String.Concat método. Usar el método String.Join si un delimitador debe separar las cadenas de origen. El código siguiente combina una matriz de palabras mediante 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 de una colección. Este método combina las cadenas de origen mediante una expresión lambda. La expresión lambda realiza el trabajo para agregar cada cadena a la acumulación existente. En el ejemplo siguiente se combina una matriz de palabras, agregando 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 StringBuilder clase o el método String.Concat o String.Join para concatenar una colección, en lugar de Enumerable.Aggregate.

Consulte también