¿Qué pasa con el signo de dólar ($ “cadena”)

He estado ejecutando algunos ejercicios de C # en un libro, y me encontré con un ejemplo que me dejó perplejo. Directamente del libro, la línea de salida se muestra como:

Console.WriteLine($"\n\tYour result is {result}."); 

Ahora, como si estuviera parado, el código funciona y el double result muestra como se esperaba. Sin embargo, al no comprender por qué el $ está al principio de la cadena, decidí eliminarlo, y ahora el código muestra el nombre de la matriz {result} lugar de los contenidos. El libro no explica por qué el $ está allí, desafortunadamente.

He estado rastreando la ayuda de VB 2015 y Google, en relación con el formato de cadenas y los métodos de sobrecarga Console.WriteLine. No veo nada que explique por qué es lo que es. Cualquier consejo sería apreciado.

Es la nueva característica en C # 6 llamada Interpolated Strings .

La forma más fácil de entenderlo es: una expresión de cadena interpolada crea una cadena reemplazando las expresiones contenidas por las representaciones de ToString de los resultados de las expresiones.

Para obtener más detalles al respecto, eche un vistazo a MSDN .

Ahora, piensa un poco más al respecto. ¿Por qué esta característica es genial?

Por ejemplo, tienes un Point clase:

 public class Point { public int X { get; set; } public int Y { get; set; } } 

Crea 2 instancias:

 var p1 = new Point { X = 5, Y = 10 }; var p2 = new Point {X = 7, Y = 3}; 

Ahora, desea enviarlo a la pantalla. Las 2 formas en que usas habitualmente:

 Console.WriteLine("The area of interest is bounded by (" + p1.X + "," + p1.Y + ") and (" + p2.X + "," + p2.Y + ")"); 

Como puede ver, concatenar una cadena como esta hace que el código sea difícil de leer y propenso a errores. Puede usar string.Format() para hacerlo más agradable:

 Console.WriteLine(string.Format("The area of interest is bounded by({0},{1}) and ({2},{3})", p1.X, p1.Y, p2.X, p2.Y)); 

Esto crea un nuevo problema:

  1. Debe mantener la cantidad de argumentos e indexar usted mismo.

Por esas razones, debemos usar una nueva característica:

 Console.WriteLine($"The area of interest is bounded by ({p1.X},{p1.Y}) and ({p2.X},{p2.Y})"); 

El comstackdor ahora mantiene los marcadores de posición para usted, por lo que no tiene que preocuparse por indexar el argumento correcto porque simplemente lo coloca allí mismo en la cadena.

Para la publicación completa, lee este blog .

Interpolación de cadenas

es un concepto que idiomas como Perl han tenido durante bastante tiempo, y ahora también obtendremos esta habilidad en C #. En String Interpolation, simplemente prefijamos la cadena con un $ (como usamos el @ para cadenas verbatim). Luego, simplemente rodeamos las expresiones que queremos interpolar con llaves (es decir, {y}):

Se parece mucho a los marcadores de posición String.Format (), pero en lugar de un índice, es la expresión misma dentro de las llaves. De hecho, no debería sorprendernos que se parezca a String.Format () porque eso es realmente todo lo que es: azúcar sintáctica que el comstackdor trata como String.Format () detrás de escena.

Una gran parte es que el comstackdor ahora mantiene los marcadores de posición para usted, por lo que no tiene que preocuparse por indexar el argumento correcto porque simplemente lo coloca allí mismo en la cadena.

Lea más sobre C # /. NET Little Wonders: Interpolación de cadenas en C # 6