Domanda

    

Questa domanda ha già una risposta qui:

    
            
  •              Uso della parola chiave var in C #                                      86 risposte                          
  •     
    

Attualmente sto usando la versione di prova di 30 giorni di ReSharper e finora sono rimasto colpito dai suggerimenti che offre. Un suggerimento però mi confonde.

Quando definisco esplicitamente una variabile, come ad esempio:

List<String> lstString = new List<String>();

ReSharped aggiunge una piccola linea verde e mi dice di:

  

Utilizza la dichiarazione di variabili locali di tipo implicito.

Se seguo il suo suggerimento, ReSharper cambia la riga di codice in:

var lstString = new List<String>();

Quindi, c'è una sorta di guadagno in termini di prestazioni derivante dalla modifica di List<String> in var, o è semplicemente una peculiarità di ReSharper? Mi è sempre stato insegnato che definire esplicitamente una variabile, piuttosto che usare una dinamica, è più ottimale.

È stato utile?

Soluzione

  

Quindi, c'è una sorta di guadagno in termini di prestazioni che può derivare dalla modifica dell'elenco in un var

No, ma questo non è l'unico motivo valido per un refactoring. Ancora più importante, rimuove la ridondanza e rende il codice più breve senza alcuna perdita di chiarezza.

  

Mi è sempre stato insegnato che definire esplicitamente una variabile, piuttosto che usare una dinamica, è più ottimale.

Hai frainteso cosa significa var. Questo non è in alcun modo dinamico, poiché produce lo stesso output. Significa solo che il compilatore calcola il tipo per la variabile da solo. È ovviamente in grado di farlo, poiché si tratta dello stesso meccanismo utilizzato per testare la sicurezza e la correttezza del tipo.

Rimuove anche una duplicazione del codice completamente inutile. Per i tipi semplici, questo potrebbe non essere molto. Ma considera:

SomeNamespace.AndSomeVeryLongTypeName foo = new SomeNamespace.AndSomeVeryLongTypeName();

Chiaramente, in questo caso il raddoppio del nome non è solo superfluo ma effettivamente dannoso.

Altri suggerimenti

No. Emettono il stesso identico IL .

È solo una questione di stile.

var presenta il vantaggio che semplifica la modifica del tipo di funzioni di ritorno senza alterare altre parti del codice sorgente. Ad esempio, modificare il tipo di ritorno da IEnumerable<T> a List<T>. Tuttavia, potrebbe facilitare l'introduzione di bug.

La parola chiave var non dichiara effettivamente una variabile con un tipo dinamico. La variabile è ancora tipizzata staticamente, ne deriva solo il tipo dal contesto.

È una buona scorciatoia quando hai un nome lungo (i nomi generici possono essere lunghi)

Meno battitura = maggiore produttività :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top