Frage Was bedeutet "Var" in C #? [Duplikat]


Mögliche Duplikate:
Verwendung von var Schlüsselwort in C # 

In C #, wie funktioniert das Keyword?var" Arbeit?


75
2017-11-29 19:54


Ursprung


Antworten:


Dies bedeutet, dass der Typ des deklarierten lokalen Elements vom Compiler abgeleitet wird:

// This statement:
var foo = "bar";
// Is equivalent to this statement:
string foo = "bar";

Vor allem, var definiert keine Variable als dynamischen Typ. Also das ist NICHT legal:

var foo = "bar";
foo = 1; // Compiler error, the foo variable holds strings, not ints

var hat nur zwei Verwendungszwecke:

  1. Zum Deklarieren von Variablen ist weniger Eingabe erforderlich, insbesondere wenn eine Variable als verschachtelter generischer Typ deklariert wird.
  2. Es muss verwendet werden, wenn eine Referenz auf ein Objekt eines anonymen Typs gespeichert wird, da der Typname nicht im Voraus bekannt sein kann: var foo = new { Bar = "bar" };

Sie können nicht verwenden var als die Art von irgendetwas außer Einheimischen. Sie können also das Schlüsselwort nicht verwenden var um Feld / Eigenschaft / Parameter / Rückgabetypen zu deklarieren.


138
2017-11-29 19:56



Dies bedeutet, dass der Datentyp vom Kontext abgeleitet (impliziert) wird.

Von http://msdn.microsoft.com/en-us/library/bb383973.aspx

Beginnend in Visual C # 3.0, Variablen   die im Methodenumfang deklariert werden können   habe einen impliziten Typ var. Ein   implizit typisierte lokale Variable ist   stark typisiert, als ob du hättest   erklärte den Typ selbst, aber die   Compiler bestimmt den Typ. Das   Folgende zwei Erklärungen von mir sind   funktionell äquivalent:

var i = 10; // implicitly typed
int i = 10; //explicitly typed

var ist nützlich zum Beseitigen von Tastatureingaben und visuellen Geräuschen, z.B.

MyReallyReallyLongClassName x = new MyReallyReallyLongClassName();

wird

var x = new MyReallyReallyLongClassName();

kann aber bis zu dem Punkt überstrapaziert werden, an dem die Lesbarkeit geopfert wird.


12
2017-11-29 19:55



"var" bedeutet, dass der Compiler basierend auf der Verwendung den expliziten Typ der Variablen ermittelt. Beispielsweise,

var myVar = new Connection();

würde Ihnen eine Variable vom Typ Verbindung geben.


7
2017-11-29 19:56



Hatten Sie jemals solche Variableninitialisierer zu schreiben?

XmlSerializer xmlSerializer = new XmlSerialzer(typeof(int))

Beginnen Sie mit C # 3.0 und ersetzen Sie es durch

var xmlSerializer = new XmlSerialzer(typeof(int))

Ein Hinweis: Typ wird während der Kompilierung aufgelöst, also keine Probleme mit der Leistung. Der Compiler sollte jedoch in der Lage sein, den Typ während des Build-Schritts zu erkennen, also wie Code var xmlSerializer; wird überhaupt nicht kompiliert.


4
2017-11-29 20:05



Es deklariert einen Typ basierend auf dem, was ihm bei der Initialisierung zugewiesen wurde.

Ein einfaches Beispiel ist, dass der Code:

var i = 53;

Untersucht den Typ von 53 und schreibt das im Wesentlichen wie folgt um:

int i = 53;

Beachten Sie, dass, während wir haben können:

long i = 53;

Dies wird nicht mit Var passieren. Obwohl es mit:

var i = 53l; // i is now a long

Ähnlich:

var i = null; // not allowed as type can't be inferred.
var j = (string) null; // allowed as the expression (string) null has both type and value.

Dies kann eine kleine Bequemlichkeit bei komplizierten Typen sein. Bei anonymen Typen ist es wichtiger:

var i = from x in SomeSource where x.Name.Length > 3 select new {x.ID, x.Name};
foreach(var j in i)
  Console.WriteLine(j.ID.ToString() + ":" + j.Name);

Hier gibt es keine andere Möglichkeit zu definieren i und j als zu benutzen var da es keinen Namen für die Typen gibt, die sie enthalten.


4
2017-11-29 20:05