2011-08-29 8 views
35

En PHP que puede hacer lo siguiente:C# variables en cadenas

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

¿Hay una construcción del lenguaje similar en C#?

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

Respuesta

60

Esta funcionalidad no está incorporada en C#.

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

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

Sin embargo, me escribió una pequeña biblioteca de código abierto llamado SmartFormat que se extiende String.Format para que se pueda utilizar marcadores de posición con nombre (a través de la reflexión). Entonces, usted podría hacer:

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

Espero que le guste!

+2

¿Qué tipo de penalización de rendimiento hay para usar su implementación de reflexión frente a la cadena estándar.Formato? – styfle

+0

Veo que ya tiene una [página de rendimiento] (https://github.com/scottrippey/SmartFormat.NET/wiki/Performance) en la wiki. Parece bastante prometedor. ¡Buen trabajo! – styfle

+0

Sí, creo que la página de rendimiento probablemente aborda su pregunta, pero no he realizado ninguna comparación entre "Hola {0}" vs "Hola {nombre}". Obviamente, la reflexión tomará más tiempo. 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! –

0
string name = "john"; 
string var = "Hello " + name; 

si necesita orientación sobre estas operaciones básicas, le sugiero que tome primero un libro de C#. es posible que desee echar un vistazo here.

5

Hasta C# 5 (-VS2013) tiene que llamar a una función/método para ello. Ya sea una función "normal" como String.Format o una sobrecarga del operador +.

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

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

95

En C# 6, se pueden utilizar string interpolation:

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

El resaltado de sintaxis para esto en Visual Studio hace que sea muy fácil de leer y todas las fichas están marcadas.

+3

¡La mejor respuesta! –

+1

¡muchas gracias! me has ahorrado mucho tiempo. –