Hay mucha discusión sobre esto, pero creo que todo se reduce al gusto personal, al igual que el uso de la palabra clave 'this' en casi todas partes.
I personalmente prefieren las variables explícitamente tipadas, pero cuando se usan colecciones genéricas anidadas, las cosas pueden volverse más legibles usando una variable implícitamente tipada. Mira:
Dictionary<string, Dictionary<string, string>> myDictionary = new Dictionary<string, Dictionary<string, string>>();
vs:
var myDictionary = new Dictionary<string, Dictionary<string, string>>();
EDIT: este tema SO cubre el mismo tema, con algunas respuestas bonito: What to use: var or object name type?
Edit2: Trabajar mucho con asíncrono hoy en día, me parece que el uso de variables tipo explicity a veces puede evitar errores desagradables. Considere este ejemplo tonto en el que le gustaría devolver el Id de un usuario. También considere que GetUserAsync
devuelve Task<User>
. Si utiliza variables implícitamente con tipo, terminarían usando algo como esto:
public long GetUserId()
{
var user = GetUserAsync();
return user.Id;
}
Esto compila, pero es un error. 'usuario' es en realidad un Task<User>
. Y compila como Task
también tiene una propiedad Id
. En este caso, uno devolvería accidentalmente el ID de una tarea en lugar del usuario.
public long GetUserId()
{
User user = GetUserAsync();
return user.Id;
}
Lo anterior no se compila, como el compilador se quejará de que no se puede echar una tarea a un usuario. Agregar la palabra clave await
por supuesto resuelve esto.
De hecho, he tenido que esto ocurra a mí una vez :-)
Dup: http://stackoverflow.com/questions/545616/why-would-var-be-a-bad-thing, http://stackoverflow.com/questions/633474/poll-c-do-you -use-var –
sí, y http://stackoverflow.com/questions/236878/what-to-use-var-or-object-name-type – Razzie
Puede indicar a Resharper que establezca de forma predeterminada las variables explícitas ... o en al menos podrías cuando hice la prueba el año pasado –