2009-03-27 27 views
19

Estoy trabajando con asp.net mvc y creando un formulario. Quiero agregar un atributo de clase a la etiqueta del formulario.¿Por qué agregar el símbolo @ hace que esto funcione?

Encontré un ejemplo here de agregar un atributo enctype e intenté intercambiar con la clase. Obtuve un error de compilación al acceder a la vista.

Luego encontré un ejemplo de alguien que agrega un símbolo @ al principio del nombre de la propiedad y que funcionó. Es genial que funcione, pero soy uno que necesita saber por qué y una búsqueda rápida en Google no fue útil. Entiendo que C# le permite a uno preceder el @ a una cadena para ignorar los caracteres que se escapan. ¿Por qué funciona en este caso? ¿Qué le dice @ al compilador?

¿Código que produce un error de compilación?

<% Html.BeginForm("Results", "Search", 
    FormMethod.Get, new{class="search_form"}); %> 

código que hace el trabajo:

<% Html.BeginForm("Results", "Search", 
    FormMethod.Get, new{@class="search_form"}); %> 

Respuesta

37

En C#, 'clase' es una palabra clave reservada - la adición de un símbolo '@' al frente de una palabra clave reservada le permite utilizar la palabra clave como un identificador.

He aquí un ejemplo directamente de la especificación C#:

class @class { 
    public static void @static(bool @bool) { 
     if (@bool) System.Console.WriteLine("true"); 
     else System.Console.WriteLine("false"); 
    } 
} 

Nota: esto es, por supuesto, un ejemplo, y en la práctica no es recomendable.

+0

Supongo que tendría sentido. Estaba buscando demasiado profundo para encontrar la respuesta a este. – GrillerGeek

+0

Sé cómo se siente. =) –

+0

¡Agradable! No estaba al tanto de eso ... +1 –

Cuestiones relacionadas