2010-10-29 12 views
16

Eventuali duplicati:
C# 'var' vs specific type performanceUtilizzando var o non utilizzo di var

Ciao a tutti,
Recentemente ho visto il codice che utilizza var molto.
Es .:

var myString = GetAnyString(); 
var myInstance = GetClass(); 

invece di

string myString = GetAnyString(); 
MyClass myInstance = GetClass(); 

Oltre alla leggibilità (credo che l'utilizzo di var non è molto leggibile), ci sono vantaggi e/o svantaggi che lo utilizzano? Che ne dite delle prestazioni

+0

"C# 'var' rispetto alla specifica prestazione di tipo" la domanda non copre la domanda che viene posta. –

+0

Ci sono molte discussioni su 'var' sul sito su vari aspetti di esso. Dallo spettacolo (che è stato scelto), dalla praticità del suo uso, dalla natura soggettiva del motivo per cui è stato usato in primo luogo, ecc. Tutto ancora oggi rilevante. Fai la tua scelta, è un duplicato. –

+1

"Oltre alla leggibilità (penso che l'uso di var non sia molto leggibile)" - no, var è più leggibile delle citazioni ridondanti del tipo, che è uno dei motivi per cui le lingue moderne hanno inferenza di tipo. "Che dire delle prestazioni" - questo suggerisce un grave fraintendimento delle basi del linguaggio ... C# è tipizzato staticamente. –

risposta

11

var viene sostituito dal compilatore con il tipo corretto, quindi non si verificano picchi di prestazioni in runtime, a parte fr om un tempo di compilazione molto piccolo in testa forse (veeeeeeeery piccolo).

In effetti, da un punto di leggibilità di vue, io personalmente faccio come segue:

  • esemplificazione variabile: object myVar = new object();

  • variabile propagazione: var myVar = anotherVar.getComplexObject();

Inoltre, si potrebbe sii tentato di usarli quando hai un tipo di istanza molto complesso, come:

var myDict = new Dictionary<string, List<Tuple<string, object>>>(); 

Qui, migliora davvero la leggibilità.

+2

Attualmente, lavorando su un progetto Java, mi trovo MOLTO frustrato che la parola chiave var non sia disponibile è Java, specialmente durante la propagazione delle variabili, quando NON vuoi cercare nella documentazione per sapere di che tipo sei quella variabile ottenuto e come scriverlo correttamente. –

+13

Come puoi sapere come usare la variabile se non sai che è di tipo? – Goldorak84

+1

Proprio come una curiosità: in Java 7+, l'esempio sopra 'Dictionary' può essere scritto come' Map >> myMap = new HashMap <>(); ', usando il nuovo "operatore di diamante" (beh, eccetto che non c'è il tipo 'Tuple' nel JDK). –

4

ci sono vantaggi e/o inconvenienti che lo utilizzano?

Un vantaggio: meno battitura.

(penso che l'uso di var non è molto leggibile)

ho in parte d'accordo con questo punto.

È meno leggibile quando si dispone di var s = foo(); anziché string s = foo;. In altri casi può essere più leggibile.

ne dite di prestazioni

In fase di esecuzione non v'è alcuna differenza. Il compilatore lo converte nello stesso codice intermedio come se avessi esplicitamente dichiarato il tipo.

+1

"È meno leggibile quando si ha var s = foo(); invece di string s = foo;" - i problemi di leggibilità derivano interamente dall'avere nomi privi di significato. Sapendo che una cosa con un nome senza significato ottenuto da un metodo con un nome privo di significato è una stringa non aiuta. Ora utilizzo var/auto come filtro dell'intervista ... le persone che pensano che l'inferenza di tipo renda il codice meno leggibile non vengono assunte. –

+1

Jim Balter stai dicendo che il nome della variabile dovrebbe inferire il tipo? Perché suona come annullare la tua "var" per me cioè più digitando – Epirocks

20

È soggettivo, ma non mi piace usare vars. Per quanto mi riguarda, non migliorano la leggibilità.

Ma orientamento generale sulla var utilizzo è la seguente:

Usa var quando è assolutamente chiaro quale tipo di variabile viene dichiarata:

Dictionary<string, Dictionary<string, string>> varOfSomeLongType = new Dictionary<string, Dictionary<string, string>>(); 

o quando si sta dichiarando variabile di tipo anonimo:

var linqResult = from element in SomeCollection 
       select new { element.A, element.B } 
+7

LINQ è una delle poche situazioni in cui usare var secondo me. –

+0

Penso che sia più che @Andrew Bezzub stia usando LINQ per creare un tipo anonimo. Gran parte della mia esperienza (che probabilmente differisce da molte altre persone), di solito ho bisogno dei risultati della query LINQ immediatamente, e/o dei tipi LINQ sputi indietro sono ancora abbastanza leggibili. Se inizia a diventare troppo brutto, di solito cerco di riconsiderare come sto andando, dal momento che probabilmente sta diventando pericolosamente difficile da mantenere a quel punto, comunque. Se uso var, è molto più difficile da individuare e correggere. – Gurgadurgen

Problemi correlati