#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; }; } }
Комментариев нет:
Отправить комментарий