Динамическое создание объекта во время выполнения: сохранить intellisense? - PullRequest
1 голос
/ 16 февраля 2012

Недавно я изучал использование нового необычного динамического ключевого слова, введенного в C # 4.0 (DynamicObject, ExpandoObject и т. Д.)

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

Итак, до динамики у меня было:

Car car1 = CARWarehouse1["Honda"];

И с динамикой, которую я теперь могу сделать (где CARWarehouse1 теперь расширяет базу DynamicObjects)

Car car1 = CARWarehouse1.Honda

Это все хорошо, и с первого взгляда кажется, что я добился того, чего хотел ... но так ли это? Поскольку давайте посмотрим правде в глаза, для любого метода во время компиляции, если бы я неправильно набрал мой тип машины, на который ссылаются, компилятор не будет иметь проблемы, но я столкнусь с проблемами во время выполнения.

Поэтому, что мне действительно нужно, это проверка свойств времени компиляции и поддержка Intellisense. Итак - я могу это сделать?

Я знаю, что есть библиотеки, такие как Moq, которые имеют такую ​​возможность, и Resharper предоставляет некоторую поддержку в intellisense, но я ищу более округлое решение.

Любые идеи, большие, маленькие, простые или сложные приветствуются.

Ответы [ 2 ]

4 голосов
/ 16 февраля 2012

Нет, такого нет для динамических типов.

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

1 голос
/ 16 февраля 2012

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

...