2009-01-09 5 views
29

Ich verwende derzeit die 30-Tage-Testversion von ReSharper, und bisher war ich von den Vorschlägen beeindruckt. Ein Vorschlag verwirrt mich jedoch.C# 'var' Schlüsselwort im Vergleich zu explizit definierten Variablen

Wenn ich definieren explizit eine Variable, wie zum Beispiel:

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

ReSharped fügt ein wenig verschnörkelt grüne Linie und sagt mir zu:

Verwenden Deklaration implizit lokale Variable eingeben.

Wenn ich dann seinen Vorschlag folgen, ReSharper die Codezeile ändert:

var lstString = new List<String>(); 

Also, gibt es eine Art von Performance-Gewinn von Ändern der List<String> zu einem var werden musste, oder ist das ist nur eine Besonderheit von ReSharper? Ich habe immer gelernt, dass das explizite Definieren einer Variablen, anstatt eine Dynamik zu verwenden, optimaler ist.

+0

var anders als dynamische Keyword, auch Compiler var Keywords tatsächlichen Griff – erdogany

Antwort

60

Also, gibt es eine Art von Performance-Gewinn von Ändern der Liste auf einen var

werden mußte

Nein, aber das ist nicht der einzige berechtigte Grund für ein Refactoring. Noch wichtiger ist, dass die Redundanz entfernt wird und der Code kürzer wird, ohne dass die Klarheit darunter leidet.

Ich habe immer gelernt, dass das explizite Definieren einer Variablen, anstatt eine dynamische zu verwenden, optimal ist.

Sie missverstehen, was var bedeutet. Dies ist nicht in irgendeiner Weise dynamisch, da es die gleiche Ausgabe produziert. Es bedeutet nur, dass der Compiler den Typ für die Variable selbst berechnet. Es ist offensichtlich in der Lage, dies zu tun, da dies derselbe Mechanismus ist, der verwendet wird, um auf Typsicherheit und Korrektheit zu prüfen.

Es entfernt auch eine völlig nutzlose Code-Duplizierung. Für einfache Typen ist dies möglicherweise nicht viel. Aber bedenken Sie:

Klar, in diesem Fall ist die Verdoppelung des Namens nicht nur unnötig, sondern tatsächlich schädlich.

+1

Danke für die Klarstellung zu 'Var' ist nicht dasselbe wie Dynamik, das habe ich nicht bemerkt. – JustinT

+1

+1 nette Erklärung. – JonH

12

Nein. Sie emittieren die exakt gleichen IL.

Es ist nur eine Frage des Stils.

var hat den Vorteil, dass es einfacher für Sie ist, den Rückgabetyp von Funktionen zu ändern, ohne andere Teile des Quellcodes zu ändern. Zum Beispiel ändern Sie den Rückgabetyp von IEnumerable<T> zu List<T>. Es könnte jedoch die Einführung von Fehlern erleichtern.

+6

Eigentlich konvertieren, ist dies eine schlechte Verwendung von var. Es sollte nur verwendet werden, wenn der Typ aus dem Kontext ersichtlich ist. Wenn Sie den Rückgabetyp einer Methode ändern können, ohne ihren Namen zu ändern, sollten Sie var nicht verwenden, da der betreffende Typ nicht offensichtlich ist. –

+0

@Stephen: Warum ist es schlecht, wenn der Typ eines Ausdrucks nicht sofort offensichtlich ist? –

+3

Die Verwendung von var als mehrdeutiges Symbol beeinträchtigt die Lesbarkeit und Verständlichkeit erheblich. Das schnelle Erfassen des Objekttyps beim Lesen von Code führt zu viel schnellerem und höherem Verständnis. –

8

Das Schlüsselwort var deklariert tatsächlich keine Variable mit einem dynamischen Typ. Die Variable wird weiterhin statisch typisiert, sie leitet den Typ nur aus dem Kontext ab.

Es ist eine nette Abkürzung, wenn Sie einen langen Typnamen haben (generic typenames kann lang sein)

+0

Die Hauptsache ist, dass man einem Var nicht einen Moment und einen String dem nächsten zuweisen kann, wie man es bei echten dynamischen Typen kann. Sobald der Typ festgelegt ist, ist es so fest. Sie erhalten immer noch volle Intellisense-Unterstützung und alles. –

1

Weniger Tipp = mehr Produktivität :)

+3

Eigentlich: Weniger Lesbarkeit = weniger Produktivität –

+3

Gut, dann ist var rundum besser. var ist oft besser lesbar, einfach weil es viel weniger zu lesen gibt. –

+1

Die einzige Möglichkeit, dass var besser lesbar ist, ist das Erstellen von Objekten mit extrem langen (oft generischen) Namen, wie von Konrad vorgeschlagen. Dort kann die var fast sofort an den Typ angepasst werden und das Entfernen der großen Anzahl zusätzlicher Zeichen verbessert die Verständlichkeit. –

Verwandte Themen