Um simples e definição sucinta e explicação dos tipos anônimos em C #?
-
06-07-2019 - |
Pergunta
Eu não tenho idéia o que é um "tipo anônimo" está em C #, nem como ele é usado. Pode Somone me dar uma boa descrição dele e de uso?
[Nota: Eu realmente sei o que é e como usá-lo, mas pensei que eu iria pedir para aqueles que não]
Solução
Um tipo anónimo é um tipo gerado pelo compilador devido a uma expressão, tais como:
new { Property1 = x.Value1, Property2 = y.Value2, z.Value3 }
(a última é como Value3 = z.Value3
).
O nome do tipo anônimo é "indescritível" - ou seja, você não pode especificá-lo em condições normais C # - mas é um tipo perfeitamente normal, tanto quanto o CLR está em causa. Como você não pode escrever o nome, se você quiser criar uma variável de um tipo anônimo (ou um tipo genérico usando um tipo anônimo como o argumento de tipo), você precisará usar um variável local de tipo implícito com a palavra chave var
:
var person = new { Name = "Bill", Address = "..." };
tipos C # anônimos são imutáveis ??(ou seja, as propriedades são somente leitura) - o tipo gerado tem um único construtor que leva valores para todas as propriedades como parâmetros. Os tipos de propriedade são inferidos a partir dos valores.
Anonymous tipos override GetHashCode
, Equals
e ToString
de forma razoavelmente óbvios -. O comparador de igualdade padrão para cada tipo de propriedade é usado para hash e igualdade
Eles são tipicamente usados ??em LINQ, da mesma forma que você usaria "SELECT Value1 Como Property1, Value2 Como Property2, Value3" em SQL.
tipo Cada anônima initializer expressão que utiliza os mesmos nomes de propriedades e tipos na mesma ordem nos referir ao mesmo tipo, assim você pode escrever:
var x = new { Name = "Fred", Age = 10 };
x = new { Name = "Bill", Age = 15 };
Também vale a pena saber que tipos VB anônimos são ligeiramente diferentes: por padrão, eles são mutáveis. Você pode fazer com que cada imutável propriedade individual utilizando a palavra-chave "Key". Pessoalmente eu prefiro o C # forma, mas eu posso ver mutabilidade ser útil em algumas situações.
Outras dicas
Tipo Um anônimo é um tipo que não tem nome. Você pode usá-lo em qualquer lugar que você não precisa do nome do tipo. Por exemplo:
var query = from x in set where x.Property1 = value select new {x.Property1, x.Property2};
foreach (var q in query) {
// do something with q.Property1, q.Property2
}