Share via


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

Tipos anônimos 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 Amount e a Massage.

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

Tipos anônimos são normalmente usados na Selecionar cláusula de uma expressão de consulta para retornar um subconjunto das propriedades de cada objeto na seqüência de origem. Para obter mais informações sobre consultas, consulte LINQ Expressões de consulta (guia de programação de C#).

Tipos anônimos são criados usando o nova 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 de C#).

Tipos anônimos são classe tipos que consistem em um ou mais públicas propriedades somente leitura. Não há outros tipos de membros de classe como, por exemplo, métodos ou eventos são permitidos. Um tipo anônimo não pode ser convertido em qualquer interface ou tipo, exceto para 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 que inclui Color e Price Propriedades juntamente com várias propriedades que você não estiver interessado pol. 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 que usa apenas duas propriedades de Product. Isso faz com que uma quantidade menor de dados a serem retornados na consulta.

Se você não especificar os nomes de membro de tipo anônimo, o compilador oferece aos membros de tipo anônimo o mesmo nome que a propriedade que está sendo usada para inicializá-las. 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, essa variável deve ser inicializada com o var construir. Isso ocorre porque apenas o compilador não tem acesso ao nome do tipo anônimo subjacente. Para obter mais informações sobre o var, consulte Implicitamente digitado variáveis locais (C# guia de programação).

Comentários

Tipos anônimos são os tipos de referência que derivam diretamente de objeto. O compilador dá a eles um nome embora seu aplicativo não é possível acessá-lo. Da perspectiva do common language runtime, um tipo anônimo não é diferente de qualquer outro tipo de referência, exceto que ele não pode ser convertido para qualquer tipo exceto objeto.

Se dois ou mais tipos anônimos tem o mesmo número e tipo das propriedades na mesma ordem, o compilador trata como o mesmo tipo e compartilham as mesmas informações de tipo gerado pelo compilador.

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

Propriedades de tipos anônimos não podem conter tipos ponteiro.

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

Consulte também

Referência

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

Conceitos

C# Programming Guide

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

Outros recursos

Guia de Introdução do LINQ em C#