Это означает, что следующие операторы считаются вполне допустимыми.

Console.WriteLine('Счет равен ' + myOb.Count);

if(i <= myOb.Max && i >= myOb.Min) // ...

Напомним, что при создании объекта анонимного типа указываемые идентификаторы становятся свойствами, открытыми только для чтения. Поэтому их можно использовать в других частях кода.

Термин анонимный тип не совсем оправдывает свое название. Ведь тип оказывается анонимным только для программирующего, но не для компилятора, который присваивает ему внутреннее имя. Следовательно, анонимные типы не нарушают принятые в C# правила строгого контроля типов.

Для того чтобы стало более понятным особое назначение анонимных типов, рассмотрим переделанную версию прорраммы из предыдущего раздела, посвященного оператору join. Напомним, что в этой программе класс Temp требовался для инкапсуляции результата, возвращаемого оператором join. Благодаря применению

анонимного типа необходимость в этом классе-заполнителе отпадает, а исходный код программы становится менее громоздким. Результат выполнения программы при этом не меняется.

// Использовать анонимный тип для усовершенствования // программы, демонстрирующей применение оператора join-.

using System; using System.Linq;

// Класс, связывающий наименование товара с его порядковым номером, class Item {

public string Name { get; set; } public int ItemNumber { get; set; }

public Item(string nv int inum) {

Name = n;

ItemNumber = inum;

}

}

// Класс, связывающий наименование товара с состоянием его запасов на складе, 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} {1}', t.Name, t.InStock);

}

}

Обратите особое внимание на следующий оператор select.

select new { Name = item.Name,

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату