Анонимные типы (anonymous types), представленные в C# 3.0, позволяют создавать новый тип, не декларируя его заранее, а описывая непосредственно при создании переменной.

Объявление анонимного типа использует синтаксис инициализатора объектов, предварённый ключевым словом new. Тип полей не указывается, а выводится из начального значения.

var anonymous = new {a = 3, b = true, c = "stringdata"};

Если при объявлении анонимного типа в качестве значений полей применяются не константы, а элементы известного пользовательского типа или локальные переменные, то имя поля анонимного типа можно не указывать. Будет использовано имя инициализатора.

intx = 10;

// у анонимного типа будут поля x (со значением 10), b и c

var anonymous = new {x, b = true, c = "string data"};

Анонимный тип следует рассматривать как класс, состоящий из полей только для чтения. Кроме полей, других элементов анонимный тип содержать не может. Два анонимных типа считаются эквивалентными, если у них полностью (вплоть до порядка) совпадают поля (имена и типы).

var anonymous = new { a = 3, b = true, c = "stringdata" };

var anotherAnonymous = new { a = 1, b = false, c = "data" };

anonymous = anotherAnonymous;       // допустимое присваивание