2011-02-01 25 views
114

Eventuali duplicati:
ReSharper and varPerché dovrei usare var al posto di un tipo?

dopo aver installato ReSharper esige (da avvisi) che uso var quando possibile, ad esempio

UnhandledExceptionEventArgs ue = (UnhandledExceptionEventArgs) t; 

ReSharper vuole trasformalo in

var ue = (UnhandledExceptionEventArgs) t; 

Mi piace la prima versione, c'è qualche motivo per preferire var? prestazioni migliori? nulla? o è solo uno stile di codice?

+0

Altri duplicati http://stackoverflow.com/questions/296783/resharper-vars http: // stackoverflow.it/questions/1010480/why-does-resharper-default-to-warning-if-you-dont-declare-using-var http://stackoverflow.com/questions/1873873/why-does-resharper-want-to -use-var-for-everything http://stackoverflow.com/questions/1299045/is-resharper-correct –

+0

-1: questo è stato coperto * così * molte volte prima e i duplicati sono facilmente reperibili cercando nel sito . –

+4

@Greg Beech Non sono d'accordo, non tutti sanno che è un bug di ReSharper, pensavo significasse qualcosa, ma mi sbagliavo. – IAdapter

risposta

80

È davvero solo uno stile di codifica. Il compilatore genera lo stesso identico per entrambe le varianti.

vedi anche qui per la questione delle prestazioni:

+1

Questo è corretto. Ma ho provato a usare la parola chiave var in VS2010 ma il completamento automatico della sintassi a volte sembra essere perplesso. Quindi forse con ReShaper non ci sono inconvenienti per usarlo. – Peposh

+0

@Peposh yup .. lo stesso ecco perché ho smesso di usarlo ... fino a quando non ho iniziato a usare ReSharper. – carny666

+3

Ho smesso di usarlo come un'altra generazione di sviluppatori non smetterebbe di lamentarsi. La mia difesa era che se avessero letto e capito il codice, non avrebbe fatto alcuna differenza. Penso che in realtà faciliti le cose; se si rifatta il codice e il tipo cambia, non è necessario aggiornare i riferimenti a ciò che si è refactored se cambia tipo, cioè meno digitando = meno lavoro. – user1040975

29

Quando si dice "da avvisi" che cosa esattamente vuoi dire? Di solito l'ho visto dare un suggerimento che tu puoi vuoi usare var, ma niente di così duro come un avvertimento.

Non c'è differenza di prestazioni con var: il codice viene compilato con lo stesso IL. Il potenziale vantaggio è nella leggibilità: se hai già reso il tipo di variabile cristallino sul RHS del compito (ad esempio tramite una chiamata di cast o di un costruttore), qual è il vantaggio di averlo anche su LHS? È una preferenza personale però.

Se non si desidera che R # suggerisca l'uso di var, è sufficiente modificare le opzioni. Una cosa su ReSharper: è molto configurabile :)

+0

c'è un avviso verde, penso che il suggerimento è quando clicco per esempio su una stringa e posso fare un po 'di magia con esso, ma questo è un avvertimento. Dopo aver cliccato su di esso è chiamato "Suggerimento". – IAdapter

+6

@ 01: Non direi che una luce verde è un "avvertimento". Arancione o rosso, sì ... ma verde? –

+0

se è una questione di stile di programmazione del perché dovrei preoccuparmene? è un suggerimento, ma per un nuovo utente come me sembra un avvertimento e se non mi interessa vorrei solo cambiarlo in var (ReSharper dovrebbe sapere meglio di me). Penso che il termine tecnico sia "rumore". – IAdapter

10

In questo caso si tratta solo di stile nello scrivere codice.

L'uso di var è necessario solo quando si tratta di tipi anonimi.
In altre situazioni è una questione di gusti.

+1

ma come molti framework come questo ReSharper sta forzando i suoi gusti;) – IAdapter

+4

Il resharper non sta forzando nulla. È un suggerimento. Ecco perché è verde. –

+0

@Mystere Man come se tu non stia forzando nessuno a non essere d'accordo con ReSharper, stai solo dicendo che ReSharper ha sempre ragione. Penso che molte persone vedano un avvertimento verde. – IAdapter

10

Come gli altri hanno detto, non v'è alcuna differenza nel codice compilato (IL) quando si utilizza uno dei seguenti modi:

var x1 = new object(); 
object x2 = new object; 

suppongo ReSharper si avverte perché è [secondo me] più facile leggere il primo esempio rispetto al secondo. Inoltre, qual è la necessità di ripetere il nome del tipo due volte?

Si consideri il seguente e si otterrà quello che voglio dire:

KeyValuePair<string, KeyValuePair<string, int>> y1 = new KeyValuePair<string, KeyValuePair<string, int>>("key", new KeyValuePair<string, int>("subkey", 5)); 

È il modo più facile da leggere questo, invece:

var y2 = new KeyValuePair<string, KeyValuePair<string, int>>("key", new KeyValuePair<string, int>("subkey", 5)); 
+6

La ragione per cui preferirei NON usare ** var ** è se ho commesso un errore sul tipo che mi aspetto di restituire sull'RHS, quindi l'uso di un tipo esplicito sul lato sinistro catturerà l'errore. Inoltre non è sempre ovvio osservare l'RHS di quale tipo è senza Intellisense. Nell'esempio di cui sopra sarei propenso per aggiungere un'istruzione using ' utilizzando NestedKVP = KeyValuePair > NestedKVP y1 = new NestedKVP ("chiave", nuova KeyValuePair ("sottochiave", 5)) ; ' – JonN

Problemi correlati