Niejawnie wpisane zmienne lokalne (Przewodnik programowania w języku C#)

Zmienne lokalne może być udzielona nie powiązano "typ" var zamiast z typem jawnym.var Słowa kluczowego nakazuje kompilatorowi rozpoznać typ zmiennej z wyrażenie po prawej stronie instrukcji inicjalizacji.Nie powiązano typu może być wbudowany typ, typ anonimowy, typ zdefiniowany przez użytkownika lub typ zdefiniowany w.NET Framework class library.Aby uzyskać więcej informacji na temat zainicjować tablice z var, zobacz Niejawnie wpisane tablice (Przewodnik programowania w języku C#).

Poniższe przykłady pokazują różne sposoby, w których może być deklarowana zmienne lokalne z var:

// i is compiled as an int 
var i = 5;

// s is compiled as a string 
var s = "Hello";

// a is compiled as int[] 
var a = new[] { 0, 1, 2 };

// expr is compiled as IEnumerable<Customer> 
// or perhaps IQueryable<Customer> 
var expr =
    from c in customers
    where c.City == "London" 
    select c;

// anon is compiled as an anonymous type 
var anon = new { Name = "Terry", Age = 34 };

// list is compiled as List<int>                              
var list = new List<int>();

Jest ważne, aby zrozumieć, że var słowo kluczowe nie oznacza "wariant" i nie wskazują, że zmienna jest luźno wpisana lub późnym wiązaniem.Oznacza tylko, że kompilator określa i przypisuje najbardziej odpowiedniego typu.

var Słowa kluczowego mogą być używane w następujących kwestiach:

  • Zmienne lokalne (zmienne zadeklarowane na zakres metody) jak pokazano w poprzednim przykładzie.

  • W do instrukcji inicjalizacji.

    for(var x = 1; x < 10; x++)
    
  • W foreach instrukcji inicjalizacji.

    foreach(var item in list){...}
    
  • W za pomocą instrukcji.

    using (var file = new StreamReader("C:\\myfile.txt")) {...}
    

Aby uzyskać więcej informacji, zobacz Porady: użycie niejawnie wpisanych zmiennych lokalnych i tablic w wyrażeniu kwerendy (Przewodnik programowania w języku C#).

var i typy anonimowe

W wielu przypadkach użycie var jest opcjonalna i wygody składni.Jednakże, gdy zmienna jest zainicjowana z typ anonimowy należy zadeklarować zmienną jako var , jeśli trzeba uzyskać dostęp do właściwości obiektu w przyszłości.Jest to typowy scenariusz w LINQ wyrażenia kwerendy.Aby uzyskać więcej informacji, zobacz Typy anonimowe (Przewodnik programowania w języku C#).

Z punktu widzenia kod źródłowy typ anonimowy nie ma nazwy.W związku z tym jeśli zmienna kwerendy została zainicjowana z var, a następnie jedyny sposób uzyskać dostęp do właściwości w sekwencji zwróconych obiektów jest użycie var jako typu Zmienna iteracji w foreach instrukcji.

class ImplicitlyTypedLocals2
{
    static void Main()
    {
        string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" };

        // If a query produces a sequence of anonymous types,  
        // then use var in the foreach statement to access the properties. 
        var upperLowerWords =
             from w in words
             select new { Upper = w.ToUpper(), Lower = w.ToLower() };

        // Execute the query 
        foreach (var ul in upperLowerWords)
        {
            Console.WriteLine("Uppercase: {0}, Lowercase: {1}", ul.Upper, ul.Lower);
        }
    }
}
/* Outputs:
    Uppercase: APPLE, Lowercase: apple
    Uppercase: BLUEBERRY, Lowercase: blueberry
    Uppercase: CHERRY, Lowercase: cherry        
 */

Uwagi

Do deklaracji zmiennych niejawnie wpisane, obowiązują następujące ograniczenia:

  • varmożna używać, tylko jeżeli zmienna lokalna jest zadeklarowana i inicjowany w tej samej instrukcji; nie można zainicjować zmienną, NULL lub do grupy metod lub funkcją anonimową.

  • varnie można użyć pól w zakresie klasy.

  • Zmienne zadeklarowane za pomocą var nie można użyć w wyrażeniu inicjalizacji.Innymi słowy, wyrażenie to jest prawnych: int i = (i = 20); , ale to wyrażenie powoduje błąd kompilacji:var i = (i = 20);

  • Nie można zainicjować wiele zmiennych niejawnie wpisane w tej samej instrukcji.

  • Jeśli typ o nazwie var jest w zasięgu, a następnie var słowa kluczowego będzie rozpoznawać nazwy tego typu i nie będzie traktowane jako część niejawnie maszynowy deklaracji zmiennej lokalnej.

Może okazać się że var mogą być również użyteczne z wyrażeniami kwerendy, w których jest trudno określić dokładny typ konstruowanej zmienna kwerendy.Taka sytuacja może wystąpić z grupowaniem i porządkowaniem operacji.

var Słowa kluczowego również może być przydatne, gdy określonego typu zmiennej jest niewygodny wpisz na klawiaturze, jest oczywiste lub nie zwiększają czytelność kodu.Jednym z przykładów gdzie var jest pomocne w ten sposób jest z zagnieżdżone typy rodzajowe, takie jak używane z operacjami grupy.W następującej kwerendzie typu zmienna kwerendy jest IEnumerable<IGrouping<string, Student>>.Tak długo, jak i innych, którzy muszą utrzymać swój kod zrozumieć to, nie występują problemy z używaniem niejawny wpisywania dla wygody i zwięzłości.

// Same as previous example except we use the entire last name as a key. 
// Query variable is an IEnumerable<IGrouping<string, Student>> 
 var studentQuery3 =
     from student in students
     group student by student.Last;

Jednakże użycie var co najmniej mają potencjalnie utrudnia zrozumienie dla innych projektantów z kodu.Z tego powodu zwykle używa się w dokumentacji języka C# var tylko wtedy gdy jest wymagane.

Zobacz też

Zadania

Porady: użycie niejawnie wpisanych zmiennych lokalnych i tablic w wyrażeniu kwerendy (Przewodnik programowania w języku C#)

Informacje

Niejawnie wpisane tablice (Przewodnik programowania w języku C#)

Typy anonimowe (Przewodnik programowania w języku C#)

Inicjatory obiektów i kolekcji (Przewodnik programowania w języku C#)

var (odwołanie w C#)

for (odwołanie w C#)

foreach, in (odwołanie w C#)

using — Instrukcja (odwołanie w C#)

Koncepcje

Wyrażenia kwerend LINQ (Przewodnik programowania w języku C#)

Inne zasoby

Odwołanie w C#

LINQ (zapytania o języku zintegrowanym)