Простое и краткое определение и объяснение анонимных типов в C #? - PullRequest
0 голосов
/ 28 октября 2009

Понятия не имею, что такое «анонимный тип» в C # и как он используется. Сомоне может дать мне хорошее описание этого и его использования?

[Примечание: я действительно знаю, что это такое и как его использовать, но подумал, что попрошу тех, кто этого не делает]

Ответы [ 3 ]

7 голосов
/ 28 октября 2009

Анонимный тип - это тип, сгенерированный компилятором из-за выражения, такого как:

new { Property1 = x.Value1, Property2 = y.Value2, z.Value3 }

(последний как Value3 = z.Value3).

Имя анонимного типа "невыразимо" - то есть вы не можете указать его в обычном C # - но это совершенно нормальный тип для CLR. Поскольку вы не можете написать имя, если вы хотите создать переменную анонимного типа (или универсального типа, использующего анонимный тип в качестве аргумента типа), вам необходимо использовать неявно типизированную локальную переменную с ключевым словом var:

var person = new { Name = "Bill", Address = "..." };

C # анонимные типы являются неизменяемыми (то есть свойства доступны только для чтения) - сгенерированный тип имеет один конструктор, который принимает значения для всех свойств в качестве параметров. Типы свойств выводятся из значений.

Анонимные типы переопределяют GetHashCode, Equals и ToString достаточно очевидными способами - для хеширования и равенства используется компаратор по умолчанию для каждого типа свойств.

Они обычно используются в LINQ таким же образом, как если бы вы использовали «SELECT Value1 As Property1, Value2 As Property2, Value3» в SQL.

Каждое выражение инициализатора анонимного типа, которое использует одинаковые имена свойств и типы в одном и том же порядке, будет ссылаться на один и тот же тип, поэтому вы можете написать:

var x = new { Name = "Fred", Age = 10 };
x = new { Name = "Bill", Age = 15 };

Также стоит знать, что анонимные типы VB немного отличаются: по умолчанию они изменчивы. Вы можете сделать каждое отдельное свойство неизменным, используя ключевое слово «Key». Лично я предпочитаю способ C #, но я вижу, что изменчивость может быть полезна в некоторых ситуациях.

0 голосов
/ 28 октября 2009

Анонимный тип - это тип без имени. Вы можете использовать его везде, где вам не нужно название типа. Например:

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
}
...