C'è un sacco di discussioni su questo, ma penso che tutto dipenda dal gusto personale, proprio come usare la parola chiave "this" quasi ovunque.
I personalmente preferisco variabili tipizzate esplicitamente, ma quando si utilizzano raccolte generiche nidificate le cose possono diventare più leggibili utilizzando una variabile tipizzata implicitamente. Guardate:
Dictionary<string, Dictionary<string, string>> myDictionary = new Dictionary<string, Dictionary<string, string>>();
vs:
var myDictionary = new Dictionary<string, Dictionary<string, string>>();
EDIT: questo SO argomento copre lo stesso argomento, con alcune belle risposte: What to use: var or object name type?
EDIT2: Lavorando molto con async al giorno d'oggi, trovo che l'uso di variabili tipizzate esplicitamente può a volte prevenire bug cattivi. Considera questo stupido esempio in cui vorresti restituire l'ID di un utente. Si consideri inoltre che GetUserAsync
restituisce un Task<User>
. Se si utilizzano le variabili implicitamente tipizzate, si finisce per utilizzare qualcosa di simile:
public long GetUserId()
{
var user = GetUserAsync();
return user.Id;
}
Questo compila, ma è sbagliato. 'utente' è in realtà un Task<User>
. E compila come Task
ha anche una proprietà Id
. In questo caso, verrebbe accidentalmente restituito l'Id di un compito al posto dell'Utente.
public long GetUserId()
{
User user = GetUserAsync();
return user.Id;
}
È possibile che non si compila, come il compilatore si lamenta che non si può gettare un task a un utente. L'aggiunta della parola chiave await
ovviamente risolve questo problema.
realtà ho avuto questo accada a me una volta :-)
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ì, e http://stackoverflow.com/questions/236878/what-to-use-var-or-object-name-type – Razzie
Puoi dire a Resharper di default a variabili esplicite ... o a Almeno tu potresti quando ho fatto il processo l'anno scorso –