}
}
// Класс, связывающий наименование товара с состоянием его запасов на складе, class InStockStatus {
public int ItemNumber { get; set; } public bool InStock { get; set; }
public InStockStatus(int n, bool b) {
ItemNumber = n;
InStock = b;
}
}
class AnonTypeDemo { static void Main() {
Item[] items = {
new Item("Кусачки", 1424), new Item("Тиски", 7892), new Item("Молоток", 8534), new Item("nnna", 6411)
};
InStockStatus[] statusList = {
new InStockStatus(1424, true), new InStockStatus(7892, false), new InStockStatus(8534, true), new InStockStatus (6411, true)
};
// Сформировать запрос, объединяющий объекты классов Item и // InStockStatus для составления списка наименований товаров и их // наличия на складе. Теперь для этой цели используется анонимный тип. var inStockList = from item in items
join entry in statusList
on item.ItemNumber equals entry.ItemNumber select new { Name = item.Name,
InStock = entry.InStock };
Console .WriteLine ("Товар\Маличие\п") ;
// Выполнить запрос и вывести его результаты, foreach(var t in inStockList)
Console.WriteLine("{0}\t{1}", t.Name, t.InStock);
}
}
Обратите особое внимание на следующий операторselect.
select new { Name = item.Name,
InStock = entry.InStock };
Он возвращает объект анонимного типа с двумя доступными только для чтения свойствами:NameиInStock.Этим свойствам присваиваются наименование товара и состояние его наличия на складе. Благодаря применению анонимного типа необходимость в упоминавшемся выше классеTempотпадает.
Обратите также внимание на циклforeach,в котором выполняется запрос. Теперь переменная шага этого цикла объявляется с помощью ключевого словаvar.Это необходимо потому, что у типа объекта, хранящегося в переменнойinStockList,нет имени. Данная ситуация послужила одной из причин, по которым в C# были внедрены неявно типизированные переменные, поскольку они нужны для поддержки анонимных типов.
Прежде чем продолжить изложение, следует отметить еще один заслуживающий внимания аспект анонимных типов. В некоторых случаях, включая и рассмотренный выше, синтаксис анонимного типа упрощается благодаря применению
select new { item.Name, entry.InStock };