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]

Foi útil?

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
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top