Was bedeutet "var" in C #? [Duplikat]


Antworten:


160

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

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

Bemerkenswert ist , varwird nicht definiert , eine Variable eines dynamischen Typs sein. Das ist also NICHT legal:

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

var hat nur zwei Verwendungszwecke:

  1. Das Deklarieren von Variablen erfordert weniger Eingabe, insbesondere wenn eine Variable als verschachtelter generischer Typ deklariert wird.
  2. Es muss verwendet werden, wenn ein Verweis 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 nichts varanderes als Einheimische als Typ verwenden. Sie können das Schlüsselwort also nicht varzum Deklarieren von Feld- / Eigenschafts- / Parameter- / Rückgabetypen verwenden.


@cdhowie Was passiert , wenn während sagen var foo = new Foo(), fookönnte vom Typ Foooder eine ihrer Superklassen. Wie kann das legal sein?
John Strood

3
@ Jack Es ist nicht legal und das ist nicht der Fall. var foo = new Foo();ist dasselbe, wie Foo foo = new Foo();, was bedeutet , dass fooeine enthaltene FooReferenz oder eine Referenz auf ein Objekt jeden Foo Sub - Typen, nicht eine Supertyp.Foo
CDhowie

15

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

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

Ab Visual C # 3.0 können Variablen, die im Methodenbereich deklariert sind, einen impliziten Typ var haben. Eine implizit typisierte lokale Variable ist stark typisiert, als hätten Sie den Typ selbst deklariert, aber der Compiler bestimmt den Typ. Die folgenden zwei Deklarationen von i sind funktional äquivalent:

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

var ist nützlich, um Tastatureingaben und visuelle Störungen zu vermeiden, z.

MyReallyReallyLongClassName x = new MyReallyReallyLongClassName();

wird

var x = new MyReallyReallyLongClassName();

kann aber bis zu einem Punkt überbeansprucht werden, an dem die Lesbarkeit beeinträchtigt wird.


9

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

var myVar = new Connection();

würde Ihnen eine Variable vom Typ Verbindung geben.


7

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 53 und schreibt ihn im Wesentlichen wie folgt um:

int i = 53;

Beachten Sie, dass wir zwar haben können:

long i = 53;

Dies wird mit var nicht passieren. Obwohl es kann 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 bei komplizierten Typen eine geringfügige Bequemlichkeit 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 iund jals zu verwenden, varda es keinen Namen für die Typen gibt, die sie enthalten.


5

Haben Sie jemals gehasst, solche variablen Initialisierer zu schreiben?

XmlSerializer xmlSerializer = new XmlSerialzer(typeof(int))

Ab C # 3.0 können Sie es also durch ersetzen

var xmlSerializer = new XmlSerialzer(typeof(int))

Ein Hinweis: Der Typ wird während der Kompilierung behoben, sodass keine Probleme mit der Leistung auftreten. Der Compiler sollte jedoch in der Lage sein, den Typ während des Erstellungsschritts zu erkennen, damit Code wie überhaupt var xmlSerializer;nicht kompiliert wird.


0
  • Wie der Name schon sagt, ist var ohne Datentyp variabel.
  • Wenn Sie nicht wissen, welcher Datentyp von einer Methode zurückgegeben wird, eignen sich solche Fälle für die Verwendung von var.
  • var ist ein impliziter Typ, was bedeutet, dass das System den Datentyp selbst definiert. Der Compiler leitet seinen Typ basierend auf dem Wert rechts vom Operator "=" ab.
  • int / string usw. sind die expliziten Typen, wie sie von Ihnen explizit definiert werden.
  • Var kann in einer Methode nur als lokale Variable definiert werden
  • Mehrere Variablen können nicht in einer einzigen Anweisung deklariert und initialisiert werden. Zum Beispiel ist var i = 1, j = 2; ist ungültig.
int i = 100;// explicitly typed 
var j = 100; // implicitly typed

0

var ist ein "Kontextschlüsselwort" in C #, was bedeutet, dass Sie es nur implizit als lokale Variable im Kontext derselben Klasse verwenden können, in der Sie die Variable verwenden. Wenn Sie versuchen, es in einer Klasse zu verwenden, die Sie von "Main" oder einer anderen externen Klasse oder einer Schnittstelle aufrufen, wird beispielsweise der Fehler CS0825 < https://docs.microsoft.com/en-us/dotnet/ angezeigt. csharp / misc / cs0825 >

In der Dokumentation finden Sie die Hinweise, wann Sie es verwenden können und wann nicht: < https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/implicitly-typed -lokale Variablen # Bemerkungen >

Grundsätzlich sollten Sie dies nur verwenden, wenn Sie eine Variable mit einem impliziten Wert wie "var myValue =" Dies ist der Wert "deklarieren. Dies spart ein wenig Zeit im Vergleich zum Beispiel" Zeichenfolge ", aber meiner Meinung nach ist es nicht viel Zeit gespeichert und schränkt die Skalierbarkeit Ihres Projekts ein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.