2009-07-27 19 views
6

L'unico vantaggio che posso vedere a che fare:Quali sono i vantaggi di tipizzazione implicita in C# 3.0> +

var s = new ClassA(); 

oltre

ClassA s = new ClassA(); 

È che in seguito se si decide vuole ClassB, è basta cambiare l'RHS della dichiarazione.

Immagino che se si sta enumerando attraverso una raccolta si può anche solo "var" e quindi capire il tipo più tardi.

È quello ?? C'è qualche altro enorme vantaggio che la mia mente debole non vede?

+0

E quando dico So che è già digitato in fase di esecuzione ... Intendevo solo nella tua logica. – Matt

+0

possibile duplicato di [Uso della parola chiave var in C#] (http://stackoverflow.com/questions/41479/use-of-var-keyword-in-c-sharp) – nawfal

risposta

8

È principalmente zucchero sintattico. È davvero la tua preferenza A meno che non si utilizzino tipi anonimi, è necessario utilizzare var. Preferisco la digitazione implicita laddove possibile, tuttavia, brilla davvero con LINQ.

Trovo ridondante digitare un tipo due volte.

List<string> Foo = new List<string>(); 

Quando posso digitare semplicemente var quando è ovvio quale è il tipo.

var Foo = new List<string>(); 
+3

Non è puramente zucchero. È richiesto quando si lavora con tipi anonimi. – jrista

+1

Corretti, ma anche i tipi anonimi sono lo zucchero. – M4dRefluX

+1

È come dire che gli iteratori sono zucchero. Certo, puoi costruirti da solo, ma il compilatore sta facendo un bel po 'di lavoro per te includendo sostituzioni non banali su Equals, GetHashcode e ToString. – dahlbyk

4

ho iniziato quello che si rivelò essere un filo estremamente controverso quando ho firmato qui (la mia scelta di "malvagità" per descrivere l'uso generale del Var era ovviamente una scelta terribile.) Inutile dire che ho più apprezzamento per var che ho fatto prima ho iniziato quel filo, così come una migliore comprensione di come esso può essere utilizzato utilmente:

The evilness of 'var' in C#?

Alcuni buoni motivi per utilizzare var:

  • brevità
  • Riduzione della ripetizione (DRY)
  • ridotto sforzo refactoring
  • Supporta i tipi anonimi (motivo principale è stato aggiunto al C#)
0

La ragione generale per la tipizzazione implicita è stato quello di sostenere i tipi anonimi, come quelli prodotti da query LINQ. Possono anche essere un grande vantaggio quando si tratta di generici tipizzati complessi ... qualcosa come Dictionary<int,List<string>>. Non è troppo complesso, ma immagina enumerando ...

foreach KeyValuePair<int,List<string>> pair in myDictionary 
{ 

} 

è semplificato con la digitazione implicita.

2

Mi consente di non ripetermi inutile. Considera questo:

Abbiamo un nome di nome molto lungo ripetuto due volte sulla stessa riga due volte senza alcun vantaggio.Inoltre, se è necessario refactoring, è necessario aggiornare il tipo due volte. Considerando che la presente è altrettanto espressiva:

var dict = new Dictionary<string, List<int>>(); 

C'è ancora alcun dubbio circa il tipo di dict qui, ma il codice è più breve, e vorrei sostengono che è più facile da leggere pure.

5

var è utile per i tipi anonimi, che non hanno nomi da utilizzare.

var point = new {X = 10, Y = 10}; 

Questo creerà un tipo anonimo con le proprietà X e Y. Viene utilizzato principalmente per supportare LINQ. Supponete di avere:

class Person 
{ 
    public String Name {get; set;} 
    public Int32 Age {get; set;} 
    public String Address {get; set;} 
    // Many other fields 
} 

List<Person> people; // Some list of people 

Ora supponiamo che io voglio selezionare solo i nomi e gli anni fino all'età 18 di quelle persone che sono sotto l'età di 18:

var minors = from person in people where person.Age < 18 select new {Name = person.Name, YearsLeft = 18 - person.Age}; 

Ora minors contiene una List di alcuni tipo anonimo. Possiamo iterare queste persone con:

foreach (var minor in minors) 
{ 
    Console.WriteLine("{0} is {1} years away from age 18!", minor.Name, minor.YearsLeft); 
} 

Nulla di ciò sarebbe altrimenti possibile; avremmo bisogno di selezionare l'intero oggetto Person e quindi calcolare YearsLeft nel nostro ciclo, che non è quello che vogliamo.

0

Mentre la parola chiave var è stato principalmente introdotto per supportare i tipi anonimi, l'argomento principale che ho visto per il suo utilizzo è più ampiamente per brevità/codice più leggibile, più il montaggio di più sulla linea di codice:

Dictionary<string, double> data = new Dictionary<string, double>(); 
versus 
var data = new Dictionary<string, double>(); 

Anche se non è un buon motivo per la maggior parte delle persone, mi piace anche la parola chiave var come programmatore cieco, mentre ascolto il codice letto e quindi qui il nome della variabile dopo un solo syllabul :-)

1

In realtà " var "in C# è usato per gestire il tipo anonimo.

come: "Credo che se si sta enumerazione di un insieme si può anche solo a 'var' e quindi capire il tipo più avanti"

var t = new {number = 10, name = "test"}; 
Problemi correlati