$
es una abreviatura String.Format
y se usa con interpolaciones de cadenas, que es una nueva característica de C # 6. Como se usa en su caso, no hace nada, al igual string.Format()
que no haría nada.
Se convierte en algo propio cuando se usa para construir cadenas con referencia a otros valores. Lo que antes tenía que escribirse como:
var anInt = 1;
var aBool = true;
var aString = "3";
var formated = string.Format("{0},{1},{2}", anInt, aBool, aString);
Ahora se convierte en:
var anInt = 1;
var aBool = true;
var aString = "3";
var formated = $"{anInt},{aBool},{aString}";
También hay una forma alternativa, menos conocida, de utilizar la interpolación de cadenas $@
(el orden de los dos símbolos es importante). Permite que las características de una @""
cadena se mezclen $""
para admitir interpolaciones de cadena sin la necesidad de \\
toda su cadena. Entonces las siguientes dos líneas:
var someDir = "a";
Console.WriteLine($@"c:\{someDir}\b\c");
dará salida:
c:\a\b\c
$@
, entonces te ves obligado a escapar del"
personaje usando""
. Este no es el caso cuando solo se usa$
.Crea una cadena interpolada .
De MSDN
ex:
Puedes usar expresiones dentro de la cadena interpolada
Lo bueno de esto es que no necesita preocuparse por el orden de los parámetros como lo hace con
String.Format
.Ahora, si desea eliminar algunos parámetros, debe ir y actualizar todos los recuentos, lo cual ya no es el caso.
Tenga en cuenta que lo bueno
string.format
sigue siendo relevante si desea especificar información cultural en su formato .fuente
$
y especificar información cultura si convierte los datos en cadena dentro de la$
expresión utilizando la cultura correcta, por ejemplo,{somevar.ToString(...,[Insert culture info here])}
.Código de ejemplo
Salida
Se trata de cadenas interpoladas . Puede usar una cadena interpolada en cualquier lugar donde pueda usar un literal de cadena. Cuando ejecute su programa ejecutaría el código con el literal de cadena interpolado, el código calcula un nuevo literal de cadena al evaluar las expresiones de interpolación. Este cálculo ocurre cada vez que se ejecuta el código con la cadena interpolada.
El siguiente ejemplo produce un valor de cadena donde se han calculado todos los valores de interpolación de cadena. Es el resultado final y tiene tipo string. Todas las apariciones de llaves dobles
(“{{“ and “}}”)
se convierten en una sola llave.Después de ejecutar más de 2 líneas, la variable
message
contiene "Hola, Mundo".Referencia - MSDN
fuente
Característica genial. Solo quiero señalar el énfasis en por qué esto es mejor que string.format si no es evidente para algunas personas.
Leí a alguien diciendo orden string.format a "{0} {1} {2}" para que coincida con los parámetros. No está obligado a ordenar "{0} {1} {2}" en string.format, también puede hacer "{2} {0} {1}". Sin embargo, si tiene muchos parámetros, como 20, realmente desea secuenciar la cadena a "{0} {1} {2} ... {19}". Si se trata de un desastre aleatorio, tendrá dificultades para alinear sus parámetros.
Con $, puede agregar parámetros en línea sin contar sus parámetros. Esto hace que el código sea mucho más fácil de leer y mantener.
La desventaja de $ es que no puede repetir el parámetro en la cadena fácilmente, debe escribirlo. Por ejemplo, si está cansado de escribir System.Environment.NewLine, puede hacer string.format ("... {0} ... {0} ... {0}", System.Environment.NewLine), pero, en $, tienes que repetirlo. No puede hacer $ "{0}" y pasarlo a string.format porque $ "{0}" devuelve "0".
En la nota al margen, he leído un comentario en otra publicación duplicada. No pude comentar, así que aquí está. Él dijo que
crea más de una cadena de objetos. Esto no es cierto en realidad. Si hace esto en una sola línea, solo crea una cadena y se coloca en el caché de cadenas.
Todos ellos devuelven una cadena y solo crean un valor en el caché.
Por otra parte:
Crea 4 valores diferentes en el caché porque hay 4 ";".
Por lo tanto, será más fácil escribir código como el siguiente, pero crearía cinco cadenas interpoladas a medida que Carlos Muñoz corrigiera:
Esto crea una sola cadena en el caché mientras tiene un código muy fácil de leer. No estoy seguro del rendimiento, pero estoy seguro de que MS lo optimizará si aún no lo está haciendo.
fuente
String.Format()
y luego concatenadas en tiempo de ejecución conString.Concat
. Así que es mejor que no lo dividas en varias líneasTenga en cuenta que también puede combinar los dos, lo cual es bastante bueno (aunque parece un poco extraño):
fuente
$@
o@$
. Desafortunadamente solo puede ser$@
@
define cómo representar el literal de cadena.$
es un acceso directo parastring.Format
. Piense en ello como$(@"");
string.Format
. Es azucarado por presentar un valor que se analiza en astring.Format
, por lo que tiene sentido en parte, pero no del todo.$
es básicamente una llamada de función implícita, mientras que@
es parte del literal, al igual quem
en un literal decimal. Por eso solo hay un orden lógico.$
, pero en aras de la máxima compatibilidad y no codificar si el separador de directorios es '/' o '\', y también evitar el inevitable error que causa una doble barra o una barra faltante donde debería han sido uno, recomiendo usar enPath.Combine()
lugar de usar concatenaciones de cadenas al trabajar con directorios y archivos.Es más conveniente que string.Format y puede usar intellisense aquí también.
Y aquí está mi método de prueba:
fuente
Significa interpolación de cadenas.
Lo protegerá porque agrega protección de tiempo de compilación en la evaluación de la cadena.
Ya no recibirá una excepción con
string.Format("{0}{1}",secondParamIsMissing)
fuente
El siguiente ejemplo resalta varias ventajas de usar cadenas interpoladas en
string.Format()
cuanto a limpieza y legibilidad. También muestra que el código dentro{}
se evalúa como cualquier otro argumento de función, tal como lo haría sistring.Format()
se nos llama.fuente
La sintaxis de $ es buena, pero con un inconveniente.
Si necesita algo como una plantilla de cadena, que se declara en el nivel de clase como campo ... bueno, en un lugar como debería ser.
Luego tienes que declarar las variables en el mismo nivel ... lo cual no es realmente genial.
Es mucho mejor usar la cadena. Sintaxis de formato para este tipo de cosas
El uso de globals no está realmente bien y además de eso, tampoco funciona con globals
fuente
No sé cómo funciona, ¡pero también puedes usarlo para tabular tus valores!
Ejemplo:
Por supuesto, puede reemplazar "esto!" con cualquier variable o algo significativo, así como también puedes cambiar la pestaña.
fuente
el signo $ en la cadena es para la definición de cadena de interpolación que es una característica en C # para interpolar la cadena es una "cadena verdadera" que puede contener expresiones interpoladas
Para obtener más información, esta es la fuente de la respuesta y el ejemplo: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated
fuente