Partilhar via


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

Tipos anônimos fornecem uma maneira conveniente de encapsular um conjunto de propriedades somente leitura em um único objeto sem precisar definir explicitamente primeiro um tipo.O nome de tipo é gerado pelo compilador e não está disponível no nível de origem.O tipo de cada propriedade é inferido pelo compilador.

Você cria tipos anônimos usando o operador de novo juntamente com um inicializador de objeto.Para obter mais informações sobre inicializadores de objeto, consulte Objeto e coleção inicializadores (guia de programação do C#).

O exemplo a seguir mostra um tipo anônimo que é inicializada com as duas propriedades chamadas Amount e Message.

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

// Rest the mouse pointer over v.Amount and v.Message in the following
// statement to verify that their inferred types are int and string.
Console.WriteLine(v.Amount + v.Message);

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

Tipos anônimos contém uma ou mais propriedades públicas somente leitura.Nenhum outro tipo dos membros da classe, como métodos ou eventos, é válido.A expressão que é usada para inicializar uma propriedade não pode ser null, uma função anônimo, ou um tipo ponteiro.

A situação mais comum é inicializar um tipo anônimo com propriedades de outro tipo.No exemplo, suponha que existe uma classe que é chamada Product.A classe Product inclui Color e propriedades de Price , juntamente com outras propriedades que você não está interessado.products variável é uma coleção de objetos de Product .Inicia anônimos da declaração de tipo com a palavra-chave de new .A declaração inicializa um novo tipo que usa apenas duas propriedades de Product.Isso faz com que um menor quantidade de dados a serem retornados na consulta.

Se você não especificar nomes de membros no tipo anônimo, o compilador fornece aos membros de tipo anônimo o mesmo nome que a propriedade que está sendo usada para inicializar-los.Você deve fornecer um nome de uma propriedade que está sendo inicializada com uma expressão, conforme mostrado no exemplo anterior.No exemplo, os nomes das propriedades de tipo anônimo são Color e Price.

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);
}

Normalmente, quando você usa um tipo anônimo para inicializar uma variável, você declarar a variável como uma variável local implicitamente tipado usando var.O nome do tipo não pode ser especificado na declaração de variável porque apenas o compilador tenha acesso ao nome do tipo anônimo subjacente.Para obter mais informações sobre var, consulte Variáveis de locais digitadas implicitamente (C# Guia de programação).

Você pode criar uma matriz de elementos anonimamente tipados combinando uma variável local implicitamente tipado e uma matriz implicitamente digitada, conforme mostrado no exemplo o seguir.

var anonArray = new[] { new { name = "apple", diam = 4 }, new { name = "grape", diam = 1 }};

Comentários

Tipos anônimos são tipos de classe que derivam diretamente de objeto, e não podem ser convertidos a qualquer tipo exceto objeto.O compilador fornece um nome para cada tipo anônimo, embora seu aplicativo não pode acessá-lo.Da perspectiva do common language runtime, um tipo anônimo não é diferente de qualquer outro tipo de referência.

Se os dois ou mais anônimos inicializadores de objeto em um assembly especificam uma sequência de propriedades que estão na mesma ordem e que têm os mesmos nomes e tipos, o compilador trata os objetos como instâncias do mesmo tipo.Compartilham a mesma informações compiler-generated tipo.

Você não pode declarar um campo, propriedade, evento ou um, o tipo de retorno de um método como tendo um tipo anônimo.Similarmente, você não pode declarar um parâmetro de tipo, um método de uma propriedade, um construtor, ou de um indexador como tendo um tipo anônimo.Para passar um tipo anônimo, ou uma coleção que contém tipos anônimos, como um argumento para um método, você pode declarar o parâmetro como objeto do tipo.No entanto, isso derrota a finalidade de alta segurança.Se você deve armazenar os resultados da consulta ou passar para fora dos limites do método, os considerar usar uma estrutura chamado comum ou os classificação em vez de um tipo anônimo.

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

Consulte também

Referência

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

Conceitos

Guia de programação do C#

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

Outros recursos

Guia de Introdução do LINQ em C#