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

Tipos anônimo fornecem uma maneira conveniente para encapsular um conjunto de propriedades somente leitura em um único objeto sem precisar primeiro definir explicitamente um tipo.O nome do tipo gerado pelo compilador e não está disponível no nível do código fonte.O tipo das propriedades é inferido pelo compilador.O exemplo a seguir mostra um tipo anônimo sendo inicializado com duas propriedades chamadas valor e a mensagem.

var v = new { Amount = 108, Message = "Hello" };

Tipos anônimo são normalmente usados no selecionar cláusula de uma expressão de consulta para retornar um subconjunto das propriedades de cada objeto na sequência de fonte.Para obter mais informações sobre consultas, consulte Expressões de consulta do LINQ (guia de programação translation from VPE for Csharp).

Tipos anônimo são criados usando o novo operador com um inicializador de objeto.Para obter mais informações sobre os inicializadores de objeto, consulte Objeto e coleção inicializadores (guia de programação translation from VPE for Csharp).

Tipos anônimo são classe tipos que consistem em um ou mais públicas propriedades somente leitura.Não há outros tipos de membros de classe, sistema autônomo métodos ou eventos são permitidos.Um tipo anônimo não pode ser convertido em qualquer interface ou tipo, com exceção de objeto.

O cenário mais comum é inicializar um tipo anônimo com algumas propriedades de outro tipo.No exemplo a seguir, suponha que uma classe chamada Product Isso inclui Color e Price Propriedades juntamente com várias outras propriedades que você está interessado. Products é uma coleção de Product objetos. A declaração de tipo anônimo começa com o new palavra-chave. Ele inicializa um novo tipo utiliza somente duas propriedades de Product. Isso faz com que uma quantidade menor de dados a serem retornados na consulta.

Se você não especificar nomes de membros do tipo anônimo, o compilador dá os membros de tipo anônimo o mesmo nome sistema autônomo a propriedade que está sendo usada para inicializá-los.Você deve fornecer um nome de uma propriedade que está sendo inicializado com uma expressão.

var productQuery = 
    from prod in products
    select new { prod.Color, prod.Price };

foreach (var v in productQuery)
{
    Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price);
}

Quando um tipo anônimo é atribuído a uma variável, a variável deve ser inicializada com o var construção.Isso ocorre porque apenas o compilador tem acesso ao nome do subjacente de tipo anônimo.Para obter mais informações sobre o var, consulte Digitados implicitamente variáveis locais (guia de programação translation from VPE for Csharp).

Comentários

Tipos anônimo são tipos de referência derivam diretamente de objeto.O compilador dá a eles um nome embora seu aplicativo não é possível acesso-lo.Da perspectiva do common linguagem tempo de execução, um tipo anônimo não é diferente de qualquer Outros tipo de referência, exceto que não pode ser convertido em qualquer tipo, com exceção de objeto.

Se dois ou mais tipos anônimo têm o mesmo número e tipo das propriedades na mesma ordem, o compilador trata sistema autônomo o mesmo tipo e eles compartilham sistema autônomo mesmas informações de tipo gerado pelo compilador.

Um tipo anônimo tem escopo de método.Passar um tipo anônimo ou uma coleção que contém tipos anônimos, fora de um limite de método, você deve primeiro converter o tipo de objeto.No entanto, isso anula a rigidez de tipos do tipo anônimo.Se você deve armazenar os resultados da consulta ou passá-las fora dos limites do método, considere o uso de uma classe ou struct nomeado comum em vez de um tipo anônimo.

Tipos anônimo não podem conter não seguro tipos sistema autônomo propriedades.

Porque o Equals e GetHashCode métodos em tipos anônimos são definidos em termos da Equals e GetHashcode as propriedades, duas instâncias do mesmo tipo anônimo são iguais, apenas se todas as suas propriedades forem iguais.

Consulte também

Conceitos

Guia de Programação C#

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

Referência

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

Outros recursos

Introdução ao LINQ em C#

Date

History

Motivo

Julho de 2008

Adicionou informações sobre restrições de conversão para texto introdutório e seção comentários.

Aprimoramento de informações.