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
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".
sólo he utilizado y visto que se usa con las cuerdas solamente, como:
string [email protected]"some funny name";
Creo que es más útil cuando la cadena contiene \ para que no tenga que escapar. –
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"
Creo que se refería a las barras invertidas –
De hecho lo hice;) – Finglas
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" }) %>
Buen ejemplo ... –
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" }) %>
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());
}
¿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
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. –
Aún mejor sería encontrar un nombre de parámetro que realmente signifique algo. :) – Guffa
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"
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.
";
Tiendo a usar esto todo el tiempo. Mucho más fácil que escapar de los personajes. – corymathews
- 1. Mejores prácticas para C#
- 2. Mejores prácticas para usar parciales en Rails
- 3. ¿Mejores prácticas para usar memcached en Rails?
- 4. Mejores prácticas para usar y persistir enumeraciones
- 5. Mejores prácticas para usar git con CVS
- 6. ¿Mejores prácticas para C incrustado reutilizable?
- 7. mejores prácticas de C++ para las constantes
- 8. Mejores prácticas para usar HttpClient en entornos multiproceso
- 9. C# IDisposable Uso: Mejores prácticas
- 10. Mejores prácticas para almacenar configuraciones
- 11. Mejores prácticas para usar marcadores en SLF4J/Logback
- 12. Mejores prácticas para usar esquemas en SQL Server (2008)
- 13. ¿Cuáles son las mejores prácticas al usar SWIG con C#?
- 14. ¿Mejores prácticas para autoguardar borradores?
- 15. Mejores prácticas para las constantes locales en el objetivo-c
- 16. Mejores prácticas para bloquear (o entrar/salir) en C#
- 17. Mejores prácticas para usar Entity Framework con WPF DataBinding
- 18. mejores prácticas de ctags
- 19. Mejores prácticas para Magento Deployment
- 20. Registro para ASP.NET - Mejores prácticas
- 21. ¿Mejores prácticas para API seguras?
- 22. Mejores prácticas para la depuración
- 23. Mejores prácticas para forzar la recolección de basura en C#
- 24. ¿Cuáles son las mejores prácticas para usar Z2 Availability Zones?
- 25. Mejores prácticas de MySQL para usar SQL_CACHE y SQL_NO_CACHE
- 26. Redes de Objective-C: ¿mejores prácticas?
- 27. Selenium, Nunit ¿Mejores prácticas?
- 28. Mejores prácticas para capturar Throwable en Java
- 29. Mejores prácticas para PK en SQL Server
- 30. Mejores prácticas para diseñar GUI en GWT
Thanks Marc! Esto es realmente útil. –
"\\ ¿Es \\ MUY \\ útil? @" ¿No? \ Usted \ piensa? " –
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"}); ' –