Share via


Implicitamente digitado variáveis locais (C# guia de programação)

Variáveis locais podem ser designadas como um "tipo" inferido de var em vez de um tipo explícito. O var palavra-chave instrui o compilador para inferir o tipo da variável da expressão no lado direito da instrução de inicialização. O tipo inferido pode ser um tipo interno, um tipo anônimo, um tipo definido pelo usuário ou um tipo definido na.Biblioteca de classes do NET Framework. Para obter mais informações sobre como inicializar matrizes com var, consulte Arrays digitados implicitamente (C# guia de programação).

Os exemplos a seguir mostram várias maneiras de variáveis locais em que podem ser declaradas com 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>();

É importante entender que o var palavra-chave não significa "variante" e não indica que a variável é rigidez ou tardia. Apenas significa que o compilador determina e atribui o tipo mais apropriado.

O var palavra-chave pode ser usado nos seguintes contextos:

  • Em variáveis locais (variáveis declaradas no escopo do método) conforme mostrado no exemplo anterior.

  • Em um para a instrução de inicialização.

    for(var x = 1; x < 10; x++)
    
  • Em um foreach a instrução de inicialização.

    foreach(var item in list){...}
    
  • Em um usando instrução.

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

Para obter mais informações, consulte How to: Use implicitamente digitado variáveis locais e Arrays em uma expressão de consulta (C# guia de programação).

var e tipos anônimos

Em muitos casos, o uso de var é opcional e é apenas um sintáticas conveniência. No entanto, quando uma variável é inicializada com um tipo anônimo deve declarar a variável como var se você precisar acessar as propriedades do objeto em um ponto posterior. Este é um cenário comum em LINQ expressões de consulta. Para obter mais informações, consulte Tipos anônimos (guia de programação de C#).

Da perspectiva do seu código-fonte, um tipo anônimo não tem nome. Portanto, se uma variável de consulta foi inicializada com var, em seguida, a única maneira de acessar as propriedades na seqüência de objetos retornada é usar var como o tipo da variável de iteração na foreach instrução.

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        
 */

Comentários

As seguintes restrições se aplicam às declarações de variáveis digitada implicitamente:

  • varsó pode ser usado quando uma variável local é declarada e inicializada na mesma instrução; não é possível inicializar a variável como null ou a um grupo de método ou uma função anônima.

  • varnão pode ser usado em campos de escopo de classe.

  • Variáveis declaradas usando var não pode ser usado na expressão de inicialização. Em outras palavras, essa expressão é legal: int i = (i = 20); , mas essa expressão produz um erro em tempo de compilação: var i = (i = 20);

  • Múltiplas variáveis de tipo implícito não podem ser inicializadas na mesma instrução

  • Se o nome de um tipo de var está no escopo, em seguida, a var resolverá para o nome do tipo de palavra-chave e não será tratada como parte de um digitada implicitamente local variável declaração.

Talvez você descubra que var também pode ser útil com expressões de consulta na qual o tipo exato de construído da variável de consulta é difícil determinar. Isso pode ocorrer com o agrupamento e classificação de operações.

O var palavra-chave também pode ser útil quando o tipo específico da variável é entediante digitar no teclado, ou é óbvio ou não adiciona a legibilidade do código. Um exemplo onde var é útil dessa maneira é com aninhadas tipos genéricos, como aqueles usados com o grupo de operações. Na consulta a seguir, o tipo de variável de consulta é IEnumerable<IGrouping<string, Student>>. Como você e outros usuários devem manter o seu código entendem isso, não há nenhum problema com o uso de digitação implícita para conveniência e questões de brevidade.

// 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;

No entanto, o uso de var ter pelo menos o potencial de tornar seu código mais difícil de entender para outros desenvolvedores. Por esse motivo, a documentação do C# geralmente usa var somente quando for necessário.

Consulte também

Tarefas

How to: Use implicitamente digitado variáveis locais e Arrays em uma expressão de consulta (C# guia de programação)

Referência

Arrays digitados implicitamente (C# guia de programação)

Tipos anônimos (guia de programação de C#)

Objeto e coleção inicializadores (guia de programação de C#)

var (referência de C#)

para (referência de C#)

foreach, (C# Reference)

usando instrução (referência de C#)

Conceitos

LINQ Expressões de consulta (guia de programação de C#)

Outros recursos

C# Reference

LINQ (consulta integrada à linguagem)