Concatenación de cadenas con el operador ‘+’

Al mirar los metadatos de la clase de string , solo veo los operadores == y != Sobrecargados. Entonces, ¿cómo es posible realizar la concatenación para el operador ‘ + ‘?

Editar :

Algunas notas interesantes de Eric Lippert sobre la concatenación de cadenas:

Parte 1

Parte 2

También hay un súper artículo de Joel referido en la parte 2 ( http://www.joelonsoftware.com/articles/fog0000000319.html )

No lo hace – el comstackdor de C # lo hace 🙂

Entonces este código:

 string x = "hello"; string y = "there"; string z = "chaps"; string all = x + y + z; 

en realidad se comstack como:

 string x = "hello"; string y = "there"; string z = "chaps"; string all = string.Concat(x, y, z); 

(Gah – la edición intermedia eliminó otros bits accidentalmente)

El beneficio del comstackdor de C # al darse cuenta de que hay múltiples concatenaciones de cadenas aquí es que no se termina creando una cadena intermedia de x + y que luego se debe copiar de nuevo como parte de la concatenación de (x + y) y z . En cambio, lo hacemos todo de una vez.

EDITAR: Tenga en cuenta que el comstackdor no puede hacer nada si concatena en un bucle. Por ejemplo, este código:

 string x = ""; foreach (string y in strings) { x += y; } 

simplemente termina como equivalente a:

 string x = ""; foreach (string y in strings) { x = string.Concat(x, y); } 

… así que esto genera una gran cantidad de basura, y es por eso que debe usar un StringBuilder para tales casos. Tengo un artículo que entra en más detalles acerca de los dos que, afortunadamente, responderán más preguntas.

Además de la respuesta principal, agregaría que los miembros de Expression-body ofrecen una nueva syntax de taquigrafía para concat en C # 6 usando $ sign.

Por ejemplo:

 var a = "aaaaa"; var b = "bbbbb"; var c = "ccccc"; var x1 = $"{a}{b}{c}"; var x2 = $"{a} {b} {c}"; var x3 = $"{a}, {b}, {c}"; 

La salida será

 x1 : aaaaabbbbbccccc x2 : aaaaa bbbbb ccccc x3 : aaaaa, bbbbb, ccccc 

También es posible la implementación de funciones como:

 public class Contact { . . . public string City { get; set; } public int Code { get; set; } . . public string Location => $"{Code} {City}"; . . } 

Y como ejemplo

 var contact = new Contact(); contact.Code = 2000; contact.City = "Frederiksberg"; Console.WriteLine(contact.Location); 

El resultado para esto sería:

 2000 Frederiksberg