De muchas maneras, el reajuste es incorrecto para hacer esto. where
es una palabra clave contextual , lo que significa que solo actúa como palabra clave en algunos escenarios muy específicos (es decir, LINQ). En la posición indicada, en realidad no hace nada. No se confundiría como una palabra clave allí, como cuando los diseñadores del lenguaje C# agregan palabras clave a C# que necesitan para garantizar que el código preexistente continúe compilando (en la medida de lo posible), y eso habría sido legal en C# anterior.
El uso de @
también confunde/complica algunas herramientas (navaja, en particular, dado que la maquinilla de afeitar ya utiliza @
para indicar el inicio de código - lo que significa que una variable utilizando @
(es decir @string
) A veces es necesario @
y que a veces Necesito @@
- y sé de al menos una advertencia IDE falsamente positiva que esto puede causar).
¡Sin embargo! Si el parámetro fue if
o class
etc., entonces @if
/@class
le permite usarlo como un nombre de variable en lugar de confundirse como una palabra clave C#. Eso también no es una gran idea, tenga en cuenta. Pero por la misma razón, no comenzaríamos a hacerlo a todos nuestro código (string @name = ...
etc.) - entonces, ¿por qué hacerlo aquí? No es necesario, y como lo demuestra esta pregunta, ha agregado confusión.
Personalmente, sin embargo, encontraría un nombre de parámetro que no sea una palabra clave o una palabra clave contextual.
Mira esta publicación sobre el operador '@' verbatim http://sanity-free.org/112/all_about_the_sign_csharp_verbatim_identifier.html – ja72