Frage

Nachschärfer ist der Meinung, dass dies auf jeden Fall der Fall ist, und nach dem Auspacken wird Ihnen die Konvertierung im Weg stehen

Dooberry dooberry = new Dooberry();

Zu

var dooberry = new Dooberry();

Gilt das wirklich als der beste Stil?

War es hilfreich?

Lösung

Es ist natürlich eine Frage des Stils, aber ich stimme Dare zu: C# 3.0 Implizite Typdeklarationen:Var oder nicht Var?.Ich denke, die Verwendung von var anstelle eines expliziten Typs macht Ihren Code weniger lesbar. Im folgenden Code:

var result = GetUserID();

Was ist Ergebnis?Ein int, ein String, eine GUID?Ja, das ist wichtig, und nein, ich sollte mich nicht durch den Code wühlen müssen, um es zu wissen.Besonders ärgerlich ist es bei Codebeispielen.

Jeff hat dazu einen Beitrag geschrieben, in dem er sagte: er bevorzugt var.Aber der Typ ist verrückt!

Ich sehe ein Muster für den Stackoverflow-Erfolg:Graben Sie alte CodingHorror-Beiträge aus und formulieren Sie sie (im Jeopardy-Stil) in Form einer Frage.

Andere Tipps

Ich verwende es nur, wenn klar erkennbar ist, was var ist.

klar für mich:

XmlNodeList itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

ist mir nicht klar:

var itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

Die beste Zusammenfassung der Antwort, die ich dazu gesehen habe, ist Kommentar von Eric Lippert, was im Wesentlichen besagt, dass Sie den konkreten Typ verwenden sollten, wenn es wichtig ist, um welchen Typ es sich handelt, andernfalls nicht.Grundsätzlich sollten Typinformationen den Stellen vorbehalten bleiben, an denen der Typ wichtig ist.

Der Standard in meinem Unternehmen besteht darin, var überall zu verwenden, worauf wir auch eingegangen sind Ich habe verschiedene Empfehlungen gelesen und dann einige Zeit damit verbracht, sie auszuprobieren, um herauszufinden, ob das Fehlen annotierter Typinformationen hilfreich oder hinderlich war.Wir empfanden es als eine Hilfe.

Die meisten Empfehlungen, auf die Menschen verlinkt haben (z. B.Dare's) sind Empfehlungen von Leuten, die noch nie versucht haben, mit var anstelle des konkreten Typs zu programmieren.Dies macht die Empfehlungen nahezu wertlos, da sie nicht aus Erfahrung sprechen, sondern lediglich extrapolieren.

Der beste Rat, den ich Ihnen geben kann, ist, es selbst auszuprobieren und herauszufinden, was für Sie und Ihr Team funktioniert.

@jongalloway - var macht Ihren Code nicht unbedingt unleserlicher.

var myvariable = DateTime.Now
DateTime myvariable = DateTime.Now;

Der erste ist genauso lesbar wie der zweite und erfordert weniger Arbeit

var myvariable = ResultFromMethod();

Hier haben Sie Recht, var könnte den Code weniger lesbar machen.Ich mag var, denn wenn ich eine Dezimalzahl in ein Double umwandele, muss ich sie nicht an vielen Stellen ändern (und sagen Sie nicht Refactor, manchmal vergesse ich es, lassen Sie mich einfach var!)

BEARBEITEN: Habe gerade den Artikel gelesen, ich stimme zu.Lol.

Ich habe das Gefühl, dass dies im Laufe der Zeit eine der am häufigsten gestellten Fragen bei Stack Overflow sein wird.Es kommt auf die Präferenz an.Was auch immer Sie für besser lesbar halten.Ich bevorzuge var, wenn der Typ auf der rechten Seite definiert ist, weil es knapper ist.Wenn ich eine Variable aus einem Methodenaufruf zuweise, verwende ich die explizite Typdeklaration.

Es gab eine gute Diskussion darüber @ Coding-Horror

Persönlich versuche ich, die Verwendung auf ein Minimum zu beschränken. Ich habe festgestellt, dass es die Lesbarkeit beeinträchtigt, insbesondere wenn eine Variable aus einem Methodenaufruf zugewiesen wird.

Einer der Vorteile eines Tools wie ReSharper besteht darin, dass Sie den Code nach Belieben schreiben und anschließend in etwas wartbareres umformatieren können.Ich habe R# so eingestellt, dass es immer neu formatiert wird, sodass der tatsächlich verwendete Typ sichtbar ist. Beim Schreiben von Code gebe ich jedoch fast immer „var“ ein.

Mit guten Werkzeugen haben Sie das Beste aus beiden Welten.

John.

Es macht nur dann Sinn, wenn Sie den Typ nicht im Voraus kennen.

„Bester Stil“ ist subjektiv und variiert je nach Kontext.

Manchmal ist es viel einfacher, „var“ zu verwenden, anstatt einen sehr langen Klassennamen einzugeben, oder wenn Sie sich über den Rückgabetyp einer bestimmten Funktion nicht sicher sind.Ich stelle fest, dass ich „var“ häufiger verwende, wenn ich mit Linq herummache oder in for-Schleifendeklarationen.

In anderen Fällen ist die Verwendung des vollständigen Klassennamens hilfreicher, da dieser den Code besser dokumentiert als „var“.

Ich habe das Gefühl, dass es Sache des Entwicklers ist, die Entscheidung zu treffen.Es gibt keine Wunderwaffe.Kein „einziger Weg“.

Prost!

Nein nicht stets aber ich würde sogar sagen, dass es die meiste Zeit ist.Typdeklarationen sind nicht viel nützlicher als die ungarische Notation es jemals war.Sie haben immer noch das gleiche Problem, dass sich Typen ändern können, und obwohl Refactoring-Tools hilfreich sind, ist dies nicht ideal im Vergleich dazu, dass Sie nicht ändern müssen, wo ein Typ angegeben ist, außer an einer einzigen Stelle, was der Don't Repeat Yourself folgt Prinzip.

Jede einzeilige Anweisung, in der der Name eines Typs sowohl für eine Variable als auch für ihren Wert angegeben werden kann, sollte auf jeden Fall var verwenden, insbesondere wenn es sich um ein langes Generic< OtherGeneric< T,U,V>, Dictionary< X, Y>>> handelt

Da ist ein wirklich guter MSDN-Artikel Zu diesem Thema werden einige Fälle beschrieben, in denen Sie var nicht verwenden können:

Für implizit typisierte Variablendeklarationen gelten die folgenden Einschränkungen:

  • var kann nur verwendet werden, wenn eine lokale Variable deklariert und initialisiert ist in derselben Erklärung;die Variable kann nicht auf Null oder auf eine methodengruppe oder einer anonymen Funktion.
  • var kann nicht für Felder im Klassenbereich verwendet werden.
  • Variablen, die mit var deklariert wurden, können nicht im Initialisierungsausdruck verwendet werden.Mit anderen Worten, diese Ausdruck ist legal:int i = (i = 20);aber dieser Ausdruck erzeugt einen Kompilierzeitfehler:var i = (i = 20);
  • Mehrere implizit typisierte Variablen können nicht in derselben Anweisung initialisiert werden.
  • Wenn ein Typ namens var im Geltungsbereich ist, wird das Schlüsselwort var aufgelöst, um diesen Typnamen und wird nicht behandelt als Teil einer implizit typisierten lokalen Variablendeklaration.

Ich würde empfehlen, es auszuprobieren, um die vollständigen Auswirkungen der Verwendung von var in Ihrem Code zu verstehen.

Ich sehe ein Muster für den Stackoverflow-Erfolg:alte CodingHorror-Posts ausgraben und (Jeopardy-Stil) formulieren sie in bedingungen einer Frage.

Ich bekenne mich unschuldig!Aber Sie haben Recht, das schien eine relativ beliebte kleine Frage zu sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top