Ich freue mich auf das kommende Visual Studio 2017 .
Im Abschnitt mit dem Titel Boosted Productivity wird ein Image von Visual Studio verwendet, um alle Vorkommen von var durch den expliziten Typ zu ersetzen .
Der Code weist anscheinend mehrere Probleme auf, die Visual Studio als "Bedarfsbehebung" identifiziert hat.
Ich wollte mein Verständnis der Verwendung von var in C # überprüfen, also las ich einen Artikel von Eric Lippert aus dem Jahr 2011 mit dem Titel Uses and misuses of implicit typing .
Eric sagt:
- Verwenden Sie var, wenn Sie müssen; Wenn Sie anonyme Typen verwenden.
- Verwenden Sie var, wenn der Typ der Deklaration aus dem Initialisierer ersichtlich ist, insbesondere wenn es sich um eine Objekterstellung handelt. Dies eliminiert Redundanz.
- Ziehen Sie die Verwendung von var in Betracht, wenn der Code den semantischen "Geschäftszweck" der Variablen betont und die "mechanischen" Details ihres Speichers herunterspielt.
- Verwenden Sie explizite Typen, wenn dies erforderlich ist, damit der Code richtig verstanden und verwaltet wird.
- Verwenden Sie beschreibende Variablennamen, unabhängig davon, ob Sie "var" verwenden. Variablennamen sollten die Semantik der Variablen darstellen, nicht die Details ihrer Speicherung. "DecimalRate" ist schlecht; "InterestRate" ist gut.
Ich denke der Großteil der var- Nutzung im Code ist wahrscheinlich in Ordnung. Ich denke, es wäre in Ordnung, var nicht für das Bit zu verwenden, das liest ...
var tweetReady = workouts [ ... ]
... weil es vielleicht nicht 100% sofort ist, um welchen Typ es sich handelt, aber selbst dann weiß ich ziemlich schnell, dass es sich um einen handelt boolean
.
Die var Verwendung für diesen Teil ...
var listOfTweets = new List<string>();
... sieht für mich genauso aus wie eine gute Verwendung von var, da ich denke, dass es überflüssig ist, Folgendes zu tun:
List<string> listOfTweets = new List<string>();
Obwohl basierend auf Eric sagt, sollte die Variable wahrscheinlich eher Tweets als listOfTweets sein .
Was wäre der Grund, die gesamte var
Verwendung hier zu ändern ? Stimmt etwas mit diesem Code nicht, den ich vermisse?
quelle
var
hier in Ordnung sind. Sie könnten möglicherweise eine ändern - aber selbst dann denke ich, dass es nicht wirklich notwendig ist. Warum alle in expliziten Typ ändern?vars
auf die gleiche Weise markiert. daneben das gleiche warnende Kreuz und eine rote Unterstreichung. Vermutlich möchte Visual Studio sie alle auf die gleiche Weise korrigieren. Es sei denn, ich irre mich.Antworten:
TL; DR: Nein, Microsoft rät nicht von der Verwendung von 'var' in C # ab. Dem Bild fehlt einfach der Kontext, um zu erklären, warum es sich beschwert.
Wenn Sie VS2017 RC installieren und das Optionsfenster öffnen und gehen Sie zu
Text Editor -> C#
, werden Sie einen neuen Abschnitt sehen:Code Style
. Dies ähnelt dem, was ReSharper seit einiger Zeit anbietet: Eine Reihe konfigurierbarer Regeln für Codierungsstile.Es enthält drei Optionen für die Verwendung von
var
: für eingebaute Typen, wenn der Variablentyp sichtbar ist, und "Anderswo". In jedem Fall können Sie "Expliziten Typ bevorzugen" oder "Var bevorzugen" angeben und die Benachrichtigungsstufe auf "Keine", "Vorschlag", "Warnung" oder "Fehler" setzen:quelle
var
.var
, daher ist es mir egal, welche Ansichten die MS in dieser Angelegenheit vertreten.Ich denke, Sie lesen zu viel hinein. Es gibt also eine Funktion, mit der Sie die Verwendung der impliziten Typisierung durch explizite Typanmerkungen ersetzen können, und Sie schließen daraus, dass die implizite Typisierung nicht empfohlen wird. Es gibt auch eine Funktion zum Kompilieren von C♯ zu CIL-Bytecode. Würden Sie daraus schließen, dass C♯ nicht empfohlen wird und wir alle stattdessen CIL-Bytecode schreiben sollten? Wahrscheinlich nicht.
Microsoft demonstriert lediglich das tiefe Verständnis, das die IDE für Ihren Code besitzt. Es kann sogar Ihre Typen für Sie schreiben, ohne dass Sie sie buchstabieren müssen. Das ist es.
Dies ist einfach ein gutes Beispiel für die Demonstration der Codeverständnisfähigkeiten der IDE. Es ist klein und in sich geschlossen (im Gegensatz zu einem größeren Refactoring), es ist in allen Editionen verfügbar und für alle Entwickler anwendbar (im Gegensatz zu einigen der zugegebenermaßen sehr eindrucksvollen Architekturvisualisierungsfunktionen, die nur in Ultimate verfügbar sind und für einen wesentlichen Teil nicht anwendbar sind) der potenziellen Benutzer von VS, die niemals so große Projekte haben werden), und obwohl es sehr einfach ist (es tut buchstäblich genau das, was
csc.exe
es seitdem getan hat)var
Es sieht auf jeden Fall beeindruckend aus, vor allem für jemanden, der implizite Typisierung und Typinferenz nicht wirklich versteht (oder der versucht, "Typinferenz" zu googeln und mit Begriffen wie Hindley-Milner, Vereinheitlichung und Backtracking überfordert ist, wenn überhaupt C )s Inferenz nur auf lokaler Ebene ist äußerst einfach und unkompliziert).Kurz gesagt: Es ist eine auffällige Art, eine IDE-Funktion zu präsentieren.
quelle