Страницы

Поиск по вопросам

пятница, 26 апреля 2019 г.

Динамическое установление типа в зависимости от условия

Есть две сборки (service reference) в одном namespace OrderSendService. Обе имеют класс Order
public class Order { public int id { get; set; } public string type { get; set; } }
ServiceReference1 и ServiceReference2, это Service references, полученные на основе wsdl. Мне нужно использовать оба этих референса. Сейчас формируется объект ServiceReference1.Order и отправляется методом ServiceReference1.Send(). Возникла необходимость для отправки использовать ServiceReference2.Send() и передавать этот же объект (при этом ServiceReference2.Send() принимает объекты из своего namespace)
Возможно ли в зависимости от условия, установить тип объекту? Использую такой код:
dynamic obj; if (condition) { obj = new ServiceReference1.Order[10]; } else { obj = new ServiceReference2.Order[10]; }
(obj будет передаваться в методе Send() одного из wsdl-сервисов).
Неймспейсы сервисов:
OrderSendService.ServiceReference1 OrderSendService.ServiceReference2
При попытке доступа к свойству obj[0].id VS 2015 показывает ошибку:
Missing compiler required member Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create
И возможно ли привести тип ServiceReference1.Order к ServiceReference2.Order?


Ответ

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

Комментариев нет:

Отправить комментарий