Variáveis locais de tipo implícito (Guia de Programação em C#)

Variáveis locais podem ser designadas como um "tipo" inferido do 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. Para obter mais informações sobre como inicializar matrizes com var, consulte Matrizes de tipo implícito (Guia de Programação em C#).

Os exemplos a seguir mostram várias maneiras de variáveis locais 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 "variant" e não indica que a variável é vagamente digitado ou ligação tardia. Ele 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 Como usar matrizes e variáveis locais de tipo implícito em uma expressão de consulta (Guia de Programação em C#).

var e tipos anônimos

Em muitos casos, o uso de var é opcional e é apenas uma conveniência sintática. 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 momento 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 em 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, e 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 a declarações de variável de tipo implícito:

  • 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 no 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ão ao nome desse tipo de palavra-chave e não será tratada como parte de uma declaração de variável local digitada implicitamente.

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, é óbvio ou não adicionará a legibilidade do código. Um exemplo onde var é útil dessa maneira é com aninhadas tipos genéricos, como aqueles usados com as operações do grupo. Na consulta a seguir, o tipo da variável de consulta é IEnumerable<IGrouping<string, Student>>. Contanto que você e outras pessoas que deve manter seu código compreendem 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

Como usar matrizes e variáveis locais de tipo implícito em uma expressão de consulta (Guia de Programação em C#)

Referência

Matrizes de tipo implícito (Guia de Programação em C#)

Tipos anônimos (Guia de Programação em C#)

Inicializadores de objeto e coleção (Guia de Programação em C#)

var (Referência de C#)

for (Referência de C#)

foreach, in (Referência de C#)

Instrução using (Referência de C#)

Conceitos

Expressões de consulta LINQ (Guia de Programação em C#)

Outros recursos

Referência de C#

LINQ (Consulta Integrada à Linguagem)