Vantagem de var palavra-chave em C # 3.0

votos
3

Duplicado:

O que usar var ou objeto tipo de nome

Eu não conseguia entender a necessidade de var palavra-chave em C # 3.0 Qual é a vantagem em utilizá-lo. eu vi esta pergunta, mas não entendeu o verdadeiro propósito de usá-lo

Publicado 19/05/2009 em 20:20
fonte usuário
Em outras línguas...                            


7 respostas

votos
23

É principalmente presente para LINQ, quando você pode usar um tipo anônimo como a projeção:

var query = from person in employees
            where person.Salary > 10000m
            select new { FullName=person.Name, person.Department };

Aqui, o tipo de querynão pode ser declarada explicitamente, porque o tipo anônimo não tem nome. (Em casos reais o tipo anônimo muitas vezes inclui valores de vários objetos, por isso não há uma classe chamada que contém todas as propriedades.)

É também praticamente útil quando você está inicializando uma variável usando um nome de tipo potencialmente longa (geralmente devido aos genéricos) e apenas chamar um construtor - que aumenta a densidade de informação (reduz a redundância). Há a mesma quantidade de informações nessas duas linhas:

List<Func<string, int>> functions = new List<Func<string, int>>();
var functions = new List<Function<string, int>>();

mas o segundo expressa de uma forma mais compacta.

Claro que isso pode ser abusado, por exemplo,

var nonObviousType = 999999999;

mas quando é óbvio que variável do tipo é, eu acredito que pode aumentar significativamente a legibilidade.

Respondeu 19/05/2009 em 20:25
fonte usuário

votos
3

A principal razão para a sua existência é a introdução de tipos anônimos em C #. Você pode construir tipos on the fly que não tem um nome. Como você especificar o seu nome? A resposta: Você não pode. Você acabou de dizer ao compilador para inferir-los para você:

var user = users.Where(u=> u.Name == "Mehrdad")
                .Select(u => new { u.Name, u.Password });
Respondeu 19/05/2009 em 20:25
fonte usuário

votos
2

É uma forma abreviada de declarar um var. Apesar de "int i = new int ()" não é muito a escrever, quando você começar a receber a tipos mais longos, você acaba com um monte de linhas que parecem:

SomeReallyLong.TypeName.WithNameSpaces.AndEverything myVar = new SomeReallyLong.TypeName.WithNameSpaces.AndEverything();

Ele eventualmente ocorreu a alguém que o compilador já sabia que tipo você estava declarando graças às informações que você estava usando para inicializar o var, por isso não seria pedir demais apenas para ter o compilador fazer a coisa certa aqui.

Respondeu 19/05/2009 em 20:25
fonte usuário

votos
1

Aqui estão algumas das vantagens

  1. Menos digitação sem perda de funcionalidade
  2. Aumenta a segurança tipo de seu código. Um loop foreach usando uma variável de iteração que é digitado para var irá pegar silenciosamente lança que são introduzidos com tipos explícitas
  3. Faz com que você não tem que escrever o mesmo nome duas vezes em uma declaração de variável.
  4. Alguns recursos, como declarar uma variável local tipo anônimo fortemente tipado, requerem o uso de var

auto-promoção descarada. I escreveu um blog sobre este assunto algum tempo atrás que mergulhou quando eu pensei que o uso de var era apropriado e contém informação relativa a este assunto.

Respondeu 19/05/2009 em 20:26
fonte usuário

votos
1
  • expressões Linq não retornam um tipo pré-definido, então você precisa de uma palavra-chave declaração da variável 'genérico' para capturar isso e outros lugares onde tipos anônimos são usados.
  • Usado com cuidado, ele pode fazer a refatoração mais fácil, dissociando o tipo de retorno de um método da variável que captura-lo.
  • Ter de colocar o mesmo nome na mesma linha duas vezes para a mesma instrução é realmente uma espécie de bobo. É uma dor para digitar algo como isto:

.

ReallyLongTypeName<SomeOtherLongTypeName> MyVariable = new ReallyLongTypeName<SomeOtherLongTypeName>();
Respondeu 19/05/2009 em 20:24
fonte usuário

votos
0

A necessidade real para a palavra-chave var era apoiar tipos anônimos em C # 3.0 - que por sua vez foram obrigados a suportar adequadamente LINQ (Language Integrated Consultando).

Sem usar var você nunca poderia fazer algo parecido com isto:

 var person = new { Name = "Peter", Age=4};

O que significa que você não pode executar executar a seguinte consulta LINQ porque você não saberia como atribuí-la a uma variável:

[var/sometype] dogsFixedQuery = from myDog in kennel select new {dogName = myDog.FirstName + " " + myDog.OwnerLastName, myDog.IsNeutered, dogLocation = kennel.Address};

O utilitário de tipos anônimos será mais aparente se você começar a criar consultas LINQ mais complexos, com vários níveis de retornos e se junta.

O fato de que você pode usar var em outras maneiras de evitar digitar algo como IEnumerable<Dictionary<List<string>,IOrderedCollection<DateTime>> myBadDesign = getBadDesignController().BadDesignResults("shoppingCart"); é apenas um efeito colateral / bônus no caso de você é um typer lazy =)

Há contras para facilitar a leitura se você começar vars chamando em locais diferentes, mas se você estiver usando var para um tipo forte e o compilador pode determinar o tipo de variável do que qualquer leitor deve ser capaz de determinar-lo também.

Respondeu 19/05/2009 em 20:38
fonte usuário

votos
0

Em resumo:

  1. minimizar a necessidade de digitar o tipo de variável duas vezes
  2. essencial no apoio tipos anônimos, por exemplo, como retornado por consultas LINQ
Respondeu 19/05/2009 em 20:26
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more