Cómo: Concatenar varias cadenas (Guía de programación de C#)

Actualización: Julio de 2008

La concatenación es el proceso de anexar una cadena al final de otra cadena. Al concatenar literales o constantes de cadena mediante el operador +, el compilador crea una única cadena. No se produce la concatenación en tiempo de ejecución. Sin embargo, las variables de cadena sólo pueden concatenarse en tiempo de ejecución. En este caso, debe entender las implicaciones de rendimiento de los distintos enfoques.

Ejemplo

En el ejemplo siguiente se muestra cómo dividir un literal de cadena largo en cadenas más pequeñas a fin de mejorar la legibilidad en el código fuente. Estas partes se concatenarán en una única cadena en tiempo de compilación. El rendimiento no se ve afectado en tiempo de ejecución, independiente del número de cadenas implicadas.

static void Main()
{
    // 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.";

    Console.WriteLine(text);
}

Para concatenar variables de cadena, puede usar los operadores + o +=, o los métodos String.Concat, String.Format u StringBuilder.Append. El operador + es fácil de usar y hace el código más intuitivo, pero trabaja en serie: se crea una nueva cadena por cada uso del operador. Por lo tanto, el encadenamiento de varios operadores es en cierto modo ineficaz. Por ejemplo, tenga en cuenta el código siguiente:

static void Main(string[] args)
{
    // To run this program, provide a command line string.
    // In Visual Studio, see Project > Properties > Debug.
    string userName = args[0];
    string date = DateTime.Today.ToShortDateString();

    // Use the + and += operators for one-time concatenations.
    string str = "Hello " + userName + ". Today is " + date + ".";
    System.Console.WriteLine(str);

    str += " How are you today?";
    System.Console.WriteLine(str);

    // Keep the console window open in debug mode.
    Console.WriteLine("Press any key to exit.");
    Console.ReadKey();
}

// Example output: 
//  Hello Alexander. Today is 1/22/2008.
//  Hello Alexander. Today is 1/22/2008. How are you today?
//  Press any key to exit.
//
Nota:

En las operaciones de concatenación de cadenas, el compilador de C# trata una cadena nula de la misma forma que una cadena vacía, pero no convierte el valor de la cadena nula original.

Si no va a concatenar un gran número de cadenas (por ejemplo, en un bucle), probablemente el costo para el rendimiento de este código no sea significativo. Lo anterior también se aplica a los métodos String.Concat y String.Format.

Sin embargo, cuando el rendimiento es importante, debería utilizar siempre la clase StringBuilder para concatenar cadenas. En el código siguiente se utiliza el método Append de la clase StringBuilder para concatenar cadenas sin el efecto de encadenamiento del operador +.

class StringBuilderTest
{
    static void Main()
    {
        string text = null;

        // Use StringBuilder for concatenation in tight loops.
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        for (int i = 0; i < 100; i++)
        {
            sb.AppendLine(i.ToString());
        }
        System.Console.WriteLine(sb.ToString());

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}
// Output:
// 0
// 1
// 2
// 3
// 4
// ...
//

Vea también

Conceptos

Guía de programación de C#

Referencia

Cadenas (Guía de programación de C#)

String

StringBuilder

Historial de cambios

Fecha

Historial

Motivo

Julio de 2008

Tema nuevo.

Mejora de la información.