2009-07-27 10 views
6

Der einzige Vorteil, den ich tun sehen kann:Was sind die Vorteile von impliziten Typisierung in C 3.0 #> +

var s = new ClassA(); 

über

ClassA s = new ClassA(); 

Ist das später, wenn Sie Sie entscheiden ClassB möchten, können Sie muss nur die RHS der Deklaration ändern.

Ich denke, wenn Sie durch eine Sammlung aufzählen, können Sie auch einfach 'Var' und dann herauszufinden, den Typ später.

Ist es das ?? Gibt es einen anderen großen Vorteil, den mein schwachsinniger Geist nicht sieht?

+0

Und wenn ich sage, Ich weiß, dass es bereits zur Laufzeit tippt ... Ich meinte nur in Ihrer Logik. – Matt

+0

möglich Duplikat von [Verwendung von var Schlüsselwort in C#] (http://stackoverflow.com/questions/41479/use-of-var-keyword-in-c-sharp) – nawfal

Antwort

8

Es ist hauptsächlich syntaktischer Zucker. Es ist wirklich deine Vorliebe. Wenn nicht anonyme Typen verwendet werden, ist die Verwendung von var erforderlich. Ich bevorzuge implizites Tippen, wo immer es möglich ist, aber es glänzt wirklich mit LINQ.

Ich finde es überflüssig, einen Typ zweimal einzugeben.

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

Wenn ich einfach var eingeben kann, wenn es offensichtlich ist, was der Typ ist.

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

Es ist nicht rein Zucker. Dies ist erforderlich, wenn Sie mit anonymen Typen arbeiten. – jrista

+1

Richtig, aber auch anonyme Typen sind Zucker. – M4dRefluX

+1

Das ist, als ob Iteratoren Zucker sind. Sicher können Sie Ihre eigenen erstellen, aber der Compiler ist tatsächlich ein gutes Stück Arbeit für Sie einschließlich nichttrivial Überschreibungen auf Equals, GetHashcode und ToString. – dahlbyk

4

Ich begann, was eine sehr umstritten Faden entpuppte, als ich hier unterschrieben (meine Wahl der „Bösartigkeit“ den allgemeinen Gebrauch zu beschreiben, von var offensichtlich eine schreckliche Wahl war.) Unnötig zu sagen, ich habe mehr Wertschätzung für var als ich, bevor ich diesen Thread, sowie ein besseres Verständnis der Autor, wie es sinnvoll genutzt werden können:

The evilness of 'var' in C#?

einige gute Gründe var zu verwenden:

  • Brevity
  • Reduzierung der Wiederholung (DRY)
  • Reduzierte Refactoring Aufwand
  • Unterstützt anonyme Typen (Schlüssel Grund, es zu C# hinzugefügt wurde)
0

Der übergeordnete Grund für die implizite Typisierung war anonyme Typen zu unterstützen, wie die von LINQ-Abfragen erzeugt. Sie können auch einen großen Vorteil im Umgang mit komplexen Generika ... etwas wie Dictionary<int,List<string>> sein. Das ist nicht allzu komplex, aber imagine Aufzählen ...

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

} 

mit impliziter Typisierung vereinfacht.

2

Es ermöglicht mir, mich nicht unnötig zu wiederholen. Stellen Sie sich Folgendes vor:

Wir haben eine sehr lange typename zweimal in der gleichen Zeile zweimal mit absolut keinen Vorteil wiederholt.Wenn Sie dies jemals reformieren müssen, müssen Sie den Typ zweimal aktualisieren. Während dies ist ebenso ausdruck:

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

Es gibt noch keinen Zweifel Art von dict hier, aber der Code ist kürzer, und ich würde behaupten, dass es einfacher ist, als auch zu lesen.

5

var ist für anonyme Typen nützlich, die haben keine Namen für Sie zu nutzen.

Dadurch wird ein anonymer Typ mit den Eigenschaften X und Y erstellt. Es wird hauptsächlich zur Unterstützung von LINQ verwendet. Angenommen, Sie haben:

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 

Jetzt nehme ich nur die Namen auswählen möchten und Jahre bis zum Alter von 18 Jahren von den Menschen, die unter dem Alter von 18 sind:

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

Jetzt minors eine List einiger enthält anonymer Typ Wir können die Leute mit iterieren:

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

All dies sonst möglich wäre; wir müssten das gesamte Person-Objekt auswählen und dann YearsLeft in unserer Schleife berechnen, was nicht das ist, was wir wollen.

0

Während das Schlüsselwort var in erster Linie anonyme Typen zu unterstützen eingeführt wurde, das Hauptargument ich benutze es mehr weit gesehen haben, ist der Kürze halber/lesbarer Code sowie die Montage mehr auf Ihrem Codezeile:

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

Obwohl für die meisten Leute kein guter Grund, mag ich auch das var-Schlüsselwort als blinden Programmierer, wie ich den ausgelesenen Code höre und somit hier den Variablennamen nach nur einer Silbe :-)

1

Eigentlich " var "in C# wird verwendet, um mit anonymen Typen umzugehen.

wie: „Ich denke, wenn man durch eine Sammlung sind Aufzählen können Sie auch nur zu‚var‘und dann später die Art herauszufinden“

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