2009-07-19 12 views
8

Al leer un libro en C#, he encontrado un código que usa @ para "sobrecargar" o usa una palabra clave C# como identificador. Supongo que esta no es una buena práctica, ya que conduce a la ambigüedad. ¿Estoy en lo cierto al pensar esto, o hay momentos en que esto debería usarse?Mejores prácticas para usar @ en C#

Respuesta

18

De hecho, casi siempre vale la pena evitar esto. El principal válido vez que se trata de una biblioteca externa (de otro idioma) que tiene una clase/etc que es una palabra clave C#, pero admitiré que tengo nunca tuve en realidad. Ayuda que C# le permita cambiar el nombre de los nombres de los argumentos del método cuando se reemplazan/implementan las interfaces, de modo que se evita un conjunto común de casos.

Otro (posiblemente perezoso) uso está en la generación de código; si siempre prefijas campos/variables/etc con @theName, entonces no tienes que preocuparte por casos especiales. Personalmente, simplemente hago una verificación cruzada con una lista de palabras clave/palabras clave contextuales de C# y agrego algo como guión bajo.

El otro uso del símbolo @ (literales verbatim de cadena) es @ "mucho más útil".

+0

Thanks Marc! Esto es realmente útil. –

+3

"\\ ¿Es \\ MUY \\ útil? @" ¿No? \ Usted \ piensa? " –

+1

Un caso de uso para @ me he encontrado es en ASP.NET MVC cuando necesita pasar un tipo anónimo con una propiedad con el nombre de una palabra clave C# como 'Html.Action (..., new {..., @ class = "Test"}); ' –

1

sólo he utilizado y visto que se usa con las cuerdas solamente, como:

string [email protected]"some funny name"; 
+1

Creo que es más útil cuando la cadena contiene \ para que no tenga que escapar. –

1

nunca supo de esto, pero por lo que dices me evito.

La única vez que uso @ en C# es para cadenas preformateadas.

@"String\no\need\to\escape\slashes" 
+1

Creo que se refería a las barras invertidas –

+0

De hecho lo hice;) – Finglas

17

Lo he utilizado en ASP.NET MVC Vistas en el que se define una clase CSS usando un HtmlHelper.

<%= Html.TextBox("Name", null, new { @class = "form-field" }) %> 
+0

Buen ejemplo ... –

4

Creo que es una mala idea tener palabras clave reservadas como nombres de variables. En mi humilde opinión hace que el código sea menos legible. Aunque hay algunos casos en los que podría ser útil. Por ejemplo, en una vista ASP.NET MVC se podría escribir:

<%= Html.TextBox("name", new { @class = "some_css_class" }) %> 
0

lo evito, excepto con los métodos de extensión, en las que creo que ayuda a la legibilidad:

public static void Foo(this object @this) 
{ 
    Console.WriteLine(@this.ToString()); 
} 
+3

¿No crees que el código en realidad causa más confusión dado que ya estás definiendo 'esto'? Preferiría simplemente usar una convención de nomenclatura como 'este objeto o', como las personas definen 'i' como el nombre de la variable para ints. para (int i = 0; i> ... – David

+0

No creo que cause ninguna confusión. Recuerde que cuando define un método de extensión, uno de los parámetros sirve como el equivalente de "esto" en un método ordinario Creo que llamarlo @this enfatiza ese hecho, particularmente cuando echas un vistazo al código. –

+2

Aún mejor sería encontrar un nombre de parámetro que realmente signifique algo. :) – Guffa

1

Puede evitar cualquier cosa que crea de forma segura Confusión. :-)

El único lugar donde uso @ es con cadenas.

De MSDN: La ventaja de @ -quoting es que las secuencias de escape no son procesados, lo que hace que sea fácil de escribir, por ejemplo, un nombre de archivo completo:

@"c:\Docs\Source\a.txt" // rather than "c:\\Docs\\Source\\a.txt"

4

Como otros tienen señaló @ -quoting puede ser muy útil con cadenas. Aquí hay algunos ejemplos:

// Not having to escape backslashes. 
String a = @"C:\Windows\System32"; 

// Escaping quotes. 
String b = @"The message is ""{0}""."; 

// String with embedded newlines. 
String c = @"An error occured. 
Please try again later. 
"; 
+0

Tiendo a usar esto todo el tiempo. Mucho más fácil que escapar de los personajes. – corymathews

Cuestiones relacionadas