Share via


Digitados implicitamente variáveis locais (guia de programação translation from VPE for Csharp)

Variáveis locais podem ser fornecidas uma inferido "type" devar em vez de um tipo explícito. The var palavra-chave instrui o compilador para inferir o tipo da variável da expressão no lado direito da demonstrativo 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 estrutura.Para obter mais informações sobre como inicializar arrays com var, consulte Arrays implicitamente tipados (guia de programação translation from VPE for Csharp).

Os exemplos a seguir mostram várias maneiras em que as 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 “ variante ” e não indica que a variável é flexível digitado ou ligação tardia. Apenas significa que o compilador determina e atribui o tipo mais apropriado.

The var a palavra-chave pode ser usada nos seguintes contextos:

  • Em variáveis locais (variáveis declaradas no escopo do método) sistema autônomo mostrado no exemplo anterior.

  • In a para demonstrativo de inicialização.

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

    foreach(var item in list){...}
    
  • In a usando demonstrativo

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

Para obter mais informações, consulte Como: Usar implicitamente tipados variáveis locais e arrays em uma expressão de consulta (guia de programação translation from VPE for Csharp).

var e tipos anônimo

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 sistema autônomo var Se você precisar acesso sistema autônomo 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ônimo (guia de programação translation from VPE for Csharp).

Da perspectiva do seu código-fonte, um tipo anônimo não tem nome.Portanto, se uma variável de consulta tiver sido inicializada com var, em seguida, a única maneira de acesso é usar sistema autônomo propriedades a sequência retornada de objetos var sistema autônomo o tipo da variável de iteração na foreach demonstrativo.

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 para declarações da variável de tipo implícito:

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

  • var nã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); but this expression produz um erro em time de compilar: var i = (i = 20);

  • Diversas variáveis de tipo implícito não não possível inicializar na mesma demonstrativo.

  • Se um tipo nomeado var está no escopo, o var palavra-chave resolverá a esse nome de tipo e não será tratada sistema autônomo parte de uma declaração de variável local de tipo implícito.

Você pode descobrir que var também pode ser útil com expressões de consulta em que é difícil determinar o tipo exato construído da variável de consulta. Isso pode ocorrer com agrupamento e operações de pedidos.

The var palavra-chave também pode ser útil quando o tipo específico de variável é entediante digitar no teclado, ou é óbvio ou não adiciona a legibilidade do código. Um exemplo em que var é útil para essa forma é com tipos genéricos aninhados sistema autônomo sistema autônomo usados com operações de agrupar. Na consulta a seguir, o tipo de variável de consulta é IEnumerable<IGrouping<string, Student>>. sistema autônomo longo sistema autônomo e de outras pessoas que deve manter 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 pelo menos têm o potencial para tornar o seu código mais difícil de entender para outros desenvolvedores. Por esse motivo, a documentação de translation from VPE for Csharp geralmente usa var somente quando ele é necessário.

Consulte também

Tarefas

Como: Usar implicitamente tipados variáveis locais e arrays em uma expressão de consulta (guia de programação translation from VPE for Csharp)

Conceitos

Expressões de consulta do LINQ (guia de programação translation from VPE for Csharp)

Referência

Arrays implicitamente tipados (guia de programação translation from VPE for Csharp)

Tipos anônimo (guia de programação translation from VPE for Csharp)

Objeto e coleção inicializadores (guia de programação translation from VPE for Csharp)

var (translation from VPE for Csharp Reference)

para (translation from VPE for Csharp Reference)

foreach (translation from VPE for Csharp Reference)

usando demonstrativo (referência translation from VPE for Csharp)

Outros recursos

Referência C#

Language-Integrated Query (LINQ)

Date

History

Motivo

Julho de 2008

Corrigido instruções para o efeito que var é necessário ao inicializar tipos anônimo. Na verdade só é obrigatório se você desejar acessar as propriedades desses objetos posteriormente.

Correção de bug do conteúdo.