¿Qué hace el signo de dólar ("cadena")? [duplicar]
Estuve revisando algunos ejercicios de C# en un libro y encontré un ejemplo que me dejó perplejo. Directamente del libro, la línea de salida se muestra como:
Console.WriteLine($"\n\tYour result is {result}.");
El código funciona y se double result
muestra como se esperaba. Sin embargo, al no entender por qué $
está ahí al principio de la cadena, decidí eliminarlo y ahora el código genera el nombre de la matriz {result}
en lugar del contenido. Desafortunadamente, el libro no explica por qué el $ está ahí.
He estado buscando en la ayuda de VB 2015 y en Google sobre el formato de cadenas y Console.WriteLine
los métodos de sobrecarga. No veo nada que explique por qué es lo que es. Cualquier consejo sería apreciado.
Es la nueva característica de C# 6 llamada Interpolated Strings
.
La forma más sencilla de entenderlo es: una expresión de cadena interpolada crea una cadena reemplazando las expresiones contenidas con las representaciones ToString de los resultados de las expresiones.
Para obtener más detalles sobre esto, consulte MSDN .
Ahora, piénsalo un poco más. ¿Por qué esta característica es genial?
Por ejemplo, tienes clase Point
:
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 mostrarlo en la pantalla. Las 2 formas que sueles utilizar:
Console.WriteLine("The area of interest is bounded by (" + p1.X + "," + p1.Y + ") and (" + p2.X + "," + p2.Y + ")");
Como puede ver, concatenar cadenas como esta hace que el código sea difícil de leer y propenso a errores. Puedes usar string.Format()
para hacerlo más bonito:
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:
- Tienes que mantener la cantidad de argumentos e indexarte tú mismo. Si la cantidad de argumentos y el índice no son los mismos, generará un error de tiempo de ejecución.
Por esas razones, deberíamos utilizar la nueva característica:
Console.WriteLine($"The area of interest is bounded by ({p1.X},{p1.Y}) and ({p2.X},{p2.Y})");
El compilador ahora mantiene los marcadores de posición para que usted no tenga que preocuparse por indexar el argumento correcto porque simplemente lo coloca allí mismo en la cadena.
Para ver la publicación completa, lea este blog .
Interpolación de cadenas
es un concepto que lenguajes como Perl han tenido desde hace bastante tiempo, y ahora también tendremos esta capacidad en C#. En la interpolación de cadenas, simplemente anteponemos la cadena con un $ (de forma muy similar a como usamos @ para cadenas textuales). 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 sorprender que se parezca a String.Format() porque eso es realmente todo lo que es: azúcar sintáctico que el compilador trata como String.Format() detrás de escena.
Una gran parte es que el compilador ahora mantiene los marcadores de posición para que usted no tenga que preocuparse por indexar el argumento correcto porque simplemente lo coloca allí mismo en la cadena.
La interpolación de cadenas de C# es un método para concatenar, formatear y manipular cadenas. Esta característica se introdujo en C# 6.0. Al utilizar la interpolación de cadenas, podemos utilizar objetos y expresiones como parte de la operación de interpolación de cadenas .
La sintaxis de la interpolación de cadenas comienza con un símbolo '$' y las expresiones se definen entre un corchete {} usando la siguiente sintaxis.
{<interpolatedExpression>[,<alignment>][:<formatString>]}
Dónde:
- interpolatedExpression : la expresión que produce un resultado que se va a formatear
- alineación : la expresión constante cuyo valor define el número mínimo de caracteres en la representación de cadena del resultado de la expresión interpolada. Si es positivo, la representación de la cadena está alineada a la derecha; si es negativo, está alineado a la izquierda.
- formatString : una cadena de formato compatible con el tipo de resultado de la expresión.
El siguiente ejemplo de código concatena una cadena donde hay un objeto, autor como parte de la interpolación de cadenas.
string author = "Mohit";
string hello = $"Hello {author} !";
Console.WriteLine(hello); // Hello Mohit !
Lea más sobre C#/.NET Little Wonders: Interpolación de cadenas en C# 6