Usando variables dentro de cadenas

89

En PHP puedo hacer lo siguiente:

$name = 'John';
$var = "Hello {$name}";    // => Hello John

¿Existe una construcción de lenguaje similar en C #?

Sé que hay, String.Format();pero quiero saber si se puede hacer sin llamar a una función / método en la cadena.

thwd
fuente

Respuestas:

223

En C # 6 puede usar la interpolación de cadenas :

string name = "John";
string result = $"Hello {name}";

El resaltado de sintaxis para esto en Visual Studio lo hace altamente legible y todos los tokens están marcados.

Fenton
fuente
88

Esta funcionalidad no está integrada en C # 5 o versiones anteriores.
Actualización: C # 6 ahora admite la interpolación de cadenas, consulte las respuestas más recientes.

La forma recomendada de hacer esto sería con String.Format:

string name = "Scott";
string output = String.Format("Hello {0}", name);

Sin embargo, escribí una pequeña biblioteca de código abierto llamada SmartFormat que se extiende String.Formatpara que pueda usar marcadores de posición con nombre (a través de la reflexión). Entonces, podrías hacer:

string name = "Scott";
string output = Smart.Format("Hello {name}", new{name}); // Results in "Hello Scott".

¡Espero que te guste!

Scott Rippey
fuente
2
¿Qué tipo de penalización de rendimiento existe por usar su implementación de reflexión frente a la cadena estándar.
styfle
Veo que ya tienes una página de rendimiento en la wiki. Parece bastante prometedor. ¡Buen trabajo!
styfle
Sí, creo que la página de rendimiento probablemente responde a su pregunta, pero no he realizado ninguna comparación entre "Hola {0}" y "Hola {nombre}". Evidentemente la reflexión tardará más. Sin embargo, el uso de la función de almacenamiento en caché mejora el rendimiento del análisis y podría minimizar la diferencia. De cualquier manera, ¡las cosas son RÁPIDAS!
Scott Rippey
1
Esto ya no es verdad. C # 6 agregó esto como una característica
Cole Johnson
5

Hasta C # 5 (-VS2013) debe llamar a una función / método para ello. O una función "normal" como String.Formato una sobrecarga del operador +.

string str = "Hello " + name; // This calls an overload of operator +.

En C # 6 (VS2015) se introdujo la interpolación de cadenas (como se describe en otras respuestas).

Anders Abel
fuente
5

Utilice los siguientes métodos

1: Método uno

var count = 123;
var message = $"Rows count is: {count}";

2: Método dos

var count = 123;
var message = "Rows count is:" + count;

3: Método tres

var count = 123;
var message = string.Format("Rows count is:{0}", count);

4: Método cuatro

var count = 123;
var message = @"Rows
                count
                is:{0}" + count;

5: Método cinco

var count = 123;
var message = $@"Rows 
                 count 
                 is: {count}";
Abn Najaf
fuente
1
Sería bueno agregar un comentario sobre por qué elegiría usar cada uno de estos métodos.
ZombieCode