Как анонимные типы должны использоваться в C#?

В соответствии с вашими этапами воспроизведения я предположил, что изменение пути вывода в свойстве приложения было вашим единственным изменением после создания приложения. Единственное, что делает это изменение, - это то, что он сообщает Visual Studio о переносе выходных сборок MSBuild в новую папку. Однако во время выполнения ASP.Net не имеет представления, что он должен загружать сборки из этой новой папки вместо папки \ bin.

Этот ответ показывает способ изменения выходного каталога сборки приложения WebApi. Чтобы получить ту же самую ошибку, обнаруженную в этом сообщении, вам нужно прокомментировать весь файл & lt; system.codedom & gt; в web.config. И затем вы можете следовать инструкциям по изменению выходного пути.

После того, как вы приступите к работе вашего приложения, вы можете разоблачить & lt; system.codedom & gt; раздел. Если вы не используете новый синтаксис C # 6 в своем приложении, вы можете удалить из приложения приложение Microsoft.CodeDom.Providers.DotNetCompilerPlatform; в противном случае вы можете добавить следующую следующую команду в событие post-build,

xcopy /Q /Y "$(TargetDir)roslyn\*.*" "$(TargetDir)..\roslyn\"

. Новый поставщик CodeDom всегда ищет папку \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \. Вышеупомянутая команда работает как обходной путь и копирует папку\roslyn из вашей новой выходной папки в \ bin.

В моих экспериментах инструмент публикации Visual Studio, однако, опубликовал выходные сборки в папке \ bin в месте развертывания независимо от моего пути выходного пути. Я предполагаю, что ваше приложение все равно должно работать над фактическим развертыванием.

15
задан itsmatt 3 October 2008 в 17:46
поделиться

7 ответов

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

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

, Например:

var query = from item in database.Items
            // ...
            select new { Id = item.Id, Name = item.Name };

return query.ToDictionary(item => item.Id, item => item.Name);

Никто не заботится о 'a, анонимный тип. Это там, таким образом, Вы не должны объявлять другой класс.

18
ответ дан 1 December 2019 в 02:20
поделиться

Самое популярное использование анонимных типов для определения проекций в LINQ к SQL-запросу.

Этот запрос

from x in db.Table1 select new {x.Column1, Alias2=x.Column2}

будет преобразован в этот SQL:

SELECT Column1, Column2 AS Alias2 FROM Table1

С анонимными типами, можно создать специальные проекции, не определяя тип для него заранее. Компилятор определит тип для Вас.

2
ответ дан 1 December 2019 в 02:20
поделиться

От LINQ в действии (раздел страницы 76 2.6.3):

... анонимные типы [являются] большим инструментом для быстрых и простых временных результатов. Мы не должны объявлять, что классы содержат временные результаты благодаря временным типам.

в основном они полезны для содержания информации в локальном объеме временно. Что-либо больше требует использования отражения и может стать настоящей проблемой. Пример, который они дают в вышеназванной книге, состоит в том, чтобы в письменной форме подключиться с консоли к идентификатору, имени и объему памяти, поднятому каждым рабочим процессом. Они создают анонимный тип, добавляют его к списку (весь один оператор) и затем используют ObjectDumper для вывода его. Поэтому для кода больше не нужен отдельно заявленный класс для содержания идентификатора, имени и используемой памяти, но все объявленные неявно переводом в нерабочее состояние количества строки к 4:

var pl = new List<Object>();
foreach(var p in Process.GetProcesses())
  pl.Add(new {p.Id, p.ProcessName, Memory=p.WorkingSet64});
ObjectDumper.Write(pl);
8
ответ дан 1 December 2019 в 02:20
поделиться

Когда Вы создаете типы для 'Использования и броска' цели. Это, кажется, наступило к LINQ. Кажется, способ создать структуры с полями на лету для запроса LINQ. Возврат структуры/типа с указанными полями только. Если бы не это необходимо было бы объявить тип .NET для каждой уникальной комбинации полей, которые Вы хотите получить.

1
ответ дан 1 December 2019 в 02:20
поделиться

Важно знать, что LINQ не вынуждает Вас, для использования анонимных типов. Можно также записать конструкции обычного объекта после выбора.

var query = from item in database.Items
// ...
select new Person(item.id, item.Name)

Это предотвращает Вас от ужасного отражательного программирования.

0
ответ дан 1 December 2019 в 02:20
поделиться

Используйте их с Linq.

1
ответ дан 1 December 2019 в 02:20
поделиться

@Wouter:

var query = from item in database.Items
select new Person
{
ID =item.id,
NAME= item.Name
};

где ID и NAME являются недвижимым имуществом вашего класса Person.

-1
ответ дан 1 December 2019 в 02:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: