it-swarm.dev

Explizite Definition variabler Datentypen im Vergleich zur Verwendung des Schlüsselworts 'var'?

Kann ich in C # das Allzweck-Schlüsselwort var für jede Variablendeklaration verwenden? Wenn ja, muss ich diese Sonderzeichen für Literalwerte in der Variablendeklaration wie das M für die Dezimalzahl in der folgenden Anweisung erwähnen:

var myDecimal = 14.5M;

Wenn es einen Unterschied macht, versuche ich, mit C # eine Webentwicklung durchzuführen.

35
wassimans

Es gab viele Streitigkeiten über die Verwendung von var. Meine allgemeinen Regeln sind die folgenden.

  • Wenn der Typ offensichtlich ist, z. B. wenn die rechte Hand der Zuweisung ein Konstruktor ist, verwenden Sie var.
  • Wenn der Typ des Schreibens komplex ist, z. B. eine LINQ-Abfrage (der Grund für var an erster Stelle), verwenden Sie var.
  • Für ambivalente Typen (Ihre Dezimalzahl ist ein Beispiel), bei denen Sie sicherstellen möchten, dass Ihre Variable korrekt eingegeben wurde, buchstabieren Sie sie.
  • Anonyme Typen müssen var verwenden.
  • In allen anderen Fällen geben Sie den Typ an.

Grundsätzlich besteht das Ziel darin, das Lesen des Codes zu vereinfachen. Wenn Sie der Meinung sind, dass var ausreicht, weil die Zuordnung offensichtlich ist, verwenden Sie var. Verwenden Sie den vollständigen Typnamen als Hinweis für den Leser, wenn Sie dies für erforderlich halten.

54
Michael Brown

Wann var verwendet werden soll, ist eine Programmierung "Holy War". Es gibt genau einen Ort, an dem dies erforderlich ist: Wenn das Ergebnis einer Operation einen anonymen Typ erstellt, z.

var result = new { Name = "John", Age = 35 };

Überall sonst ist es optional und entspricht ganz Ihrem Codierungsstandard, es in anderen Situationen zu verwenden oder nicht.

Und ja, Sie benötigen die Sonderzeichen für Literale, damit der Compiler weiß, was es auf der rechten Seite ist. In Ihrem Beispiel ist der Standardwert ohne Mdouble und nicht decimal.

14
Jesse C. Slicer

von MSDN :

Die Verwendung von var kann jedoch zumindest dazu führen, dass Ihr Code für andere Entwickler schwieriger zu verstehen ist. Aus diesem Grund wird in der C # -Dokumentation var im Allgemeinen nur verwendet, wenn dies erforderlich ist.

Ich mag implizites Tippen wirklich, wirklich nicht. An der Oberfläche neigt es dazu, Code besser lesbar zu machen, kann aber später zu vielen Problemen führen. Wenn ein Entwickler einen Variableninitialisierer ändert, z. B. von

var myFloat=100f;

zu

var myFloat=100;

oder

var myFloat=100.0;

Der Typ ändert sich, was zu einer ganzen Reihe von Compilerfehlern führt. Wenn Sie sich in einer Webansicht befinden und den Post-Build-Schritt nicht zum Vorkompilieren Ihrer Ansichten verwenden, eine ganze Reihe von Laufzeitfehlern, die ohne Effekt nicht abgefangen werden können Tests vor der Bereitstellung.

Implizite Eingabe funktioniert auch nicht überall (über denselben MSDN-Link)

var kann nur verwendet werden, wenn eine lokale Variable in derselben Anweisung deklariert und initialisiert wird. Die Variable kann nicht mit null, einer Methodengruppe oder einer anonymen Funktion initialisiert werden.

var kann nicht für Felder im Klassenbereich verwendet werden.

Mit var deklarierte Variablen können nicht im Initialisierungsausdruck verwendet werden. Mit anderen Worten, dieser Ausdruck ist legal: int i = (i = 20); Dieser Ausdruck erzeugt jedoch einen Fehler bei der Kompilierung: var i = (i = 20);

Mehrere implizit typisierte Variablen können nicht in derselben Anweisung initialisiert werden.

Wenn sich ein Typ mit dem Namen var im Gültigkeitsbereich befindet, wird das Schlüsselwort var in diesen Typnamen aufgelöst und nicht als Teil einer implizit typisierten lokalen Variablendeklaration behandelt.

Es ist sehr, sehr gut, Ihren Code konsistent zu halten (in diesem Fall überall explizit einzugeben). Meiner Meinung nach ist var faul und bietet keinen wirklichen Vorteil und führt einen weiteren potenziellen Fehlerpunkt in einen bereits komplexen Prozess ein.

Update 2017

Ich habe meine Meinung komplett geändert. Wenn ich in C # arbeite, verwende ich die meiste Zeit var (mit Ausnahme von Variablen wie Variablen vom Typ Schnittstelle und dergleichen). Der Code bleibt knapp, was die Lesbarkeit verbessert. Trotzdem - achten Sie darauf, was der aufgelöste Typ wirklich ist.

7
3Dave

Die C # -Referenz zeigt Folgendes, um die gute und schlechte Verwendung dieses Konstrukts zu veranschaulichen:

Das folgende Beispiel zeigt zwei Abfrageausdrücke. Im ersten Ausdruck ist die Verwendung von var zulässig, aber nicht erforderlich, da der Typ des Abfrageergebnisses explizit als IEnumerable angegeben werden kann. Im zweiten Ausdruck muss jedoch var verwendet werden, da das Ergebnis eine Sammlung anonymer Typen ist und der Name dieses Typs nur für den Compiler selbst zugänglich ist. Beachten Sie, dass in Beispiel 2 auch das Element für jede Iterationsvariable implizit eingegeben werden muss.

 // Example #1: var is optional because 
    // the select clause specifies a string 
    string[] words = { "Apple", "strawberry", "grape", "Peach", "banana" };
    var wordQuery = from Word in words
                    where Word[0] == 'g'
                    select Word;

    // Because each element in the sequence is a string,  
    // not an anonymous type, var is optional here also. 
    foreach (string s in wordQuery)
    {
        Console.WriteLine(s);
    }

    // Example #2: var is required because 
    // the select clause specifies an anonymous type 
    var custQuery = from cust in customers
                    where cust.City == "Phoenix" 
                    select new { cust.Name, cust.Phone };

    // var must be used because each item  
    // in the sequence is an anonymous type 
    foreach (var item in custQuery)
    {
        Console.WriteLine("Name={0}, Phone={1}", item.Name, item.Phone);
    }
3

Das Schlüsselwort var fordert den Compiler nur auf, den Typ der Variablen var type automatisch abzuleiten. Wenn Sie also eine Variable vom Typ Dezimal in einer Variablen var speichern möchten, müssen Sie das m verwenden. Wenn Sie eine Zeichenfolge speichern, müssen Sie sie ebenfalls in Anführungszeichen setzen.

0

Für mich verwende ich var nicht für die folgenden Fälle:

  • Wenn ich mir des Typs meiner Variablen sicher sein möchte (zum Beispiel, um sicherzugehen, dass der verwendete Typ doppelt und nicht dezimal ist, und das ist eine große Sache, vertrau mir!)
  • Polymorpher Code wie Fruit foo = new Apple();. In diesem Fall denke ich, dass var zu vermeiden ist und die Verwendung der übergeordneten Klasse (hier Fruit) besser ist, indem ein besseres Verständnis der Codelogik und der Begrenzung der wahrscheinlichen Fehler ermöglicht wird (mit var keine Überprüfung des polymorphen Konzepts!)

Im Übrigen denke ich, dass es vom Fall und vom Hintergrund des Entwicklers abhängt. Einige Leute aus der PHP Welt werden es vorziehen, sich nicht um die Variablentypen zu kümmern, und einige Leute aus der Java Welt werden einfach denken, dass var eine Häresie ist und die Je ausführlicher es ist, desto besser ist es.

Sie müssen Ihre persönliche Meinung abgeben :)

0
eka808