programas programacion interpolacion entender crear comandos codigos cadenas basicos atributos c# .net

c# - programacion - Interpolación de cadenas: ¿qué hace el signo @ dentro de las llaves?



manual de c# (2)

Considerar:

string newline = "/r/n"; Console.WriteLine($"Hello without at{newline}how are you?"); Console.WriteLine($"Hello with at{@newline}how are you?");

La salida de ambas líneas es idéntica. La nueva línea siempre se imprime como una nueva línea.

Hello without at how are you? Hello with at how are you?

Entonces, ¿cuándo necesito el signo en el interior de las llaves?


Es un prefijo textual redundante. De la especificación de C # :

El prefijo "@" permite el uso de palabras clave como identificadores, lo cual es útil cuando se interactúa con otros lenguajes de programación. El carácter @ no es realmente parte del identificador, por lo que el identificador podría verse en otros idiomas como un identificador normal, sin el prefijo. Un identificador con un prefijo @ se llama un identificador literal. Se permite el uso del prefijo @ para los identificadores que no son palabras clave, pero se desaconseja encarecidamente como cuestión de estilo.

Un caso de uso sería si quisieras escribir una función como esta:

private void print(string @string) => Console.WriteLine(@string);

Normalmente, no podrá nombrar una string identificadora porque es una palabra clave reservada. El prefijo @ permite hacerlo.


$"Hello { myValue }" es una cadena interpolada que se introdujo en C # 6. En su caso, esto es equivalente a una llamada a String.Format("Hello {0}", myValue) .

La palabra clave ( @ ) es necesaria cuando su variable tiene el mismo nombre que una palabra clave, lo que, por lo que sé, no es newline . Sin embargo, lo siguiente causaría un error de compilación:

String.Format("Hello {0}", if)

mientras esto no es

String.Format("Hello {0}", @if)

Aquí el textual le dice al compilador que if es el nombre de una variable , no la palabra clave if -.

Por lo tanto, no necesita el literal en su caso, porque newline no es una palabra clave. O en otras palabras, su código es equivalente a esto:

Console.WriteLine("Hello with at{0}how are you?", @newline);

que es un uso válido (aunque redundante) del textual.

Para más información, consulte la documentación sobre interpolación de cadenas .