#c_sharp #типы_данных
Есть две сборки (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?
Ответы
Ответ 1
Судя по всему, не хватало подключения библиотеки Microsoft.CSharp. Поскольку dynamic — внутри-C#-овская фича, ей нужна специальная поддержка. Проекты, созданные старыми версиями компилятора, не содержат ссылки на Microsoft.CSharp, поэтому ссылку иногда приходится добавлять вручную.Ответ 2
Заведите для разных служб разные пространства имен. Вы искуственно создаете ситуацию, когда .NET не имеет возможности различить два типа Order в том месте кода, где они "видны". И возможно ли привести тип ServiceReference1.Order к ServiceReference2.Order Нет. public class OrderConverter { public static ServiceReference1.Order Convert(ServiceReference2.Order anOrder) { return new ServiceReference1.Order() { id = anOrder.id; type = anOrder.type; }; } public static ServiceReference2.Order Convert(ServiceReference1.Order anOrder) { return new ServiceReference2.Order() { id = anOrder.id; type = anOrder.type; }; } }
Комментариев нет:
Отправить комментарий