Невозможно привести объект типа «System.Object []» к «MyObject []», что дает?
Сценарий:
В настоящее время я пишу слой для абстрагирования 3 похожих веб-сервисов в один используемый класс. Каждый веб-сервис предоставляет набор объектов, которые имеют общие черты. Я создал набор промежуточных объектов, которые используют общность. Однако в моем слое мне нужно конвертировать между объектами веб-сервиса и моими объектами.
Я использовал рефлексию для создания соответствующего типа во время выполнения, прежде чем сделать вызов веб-сервису, например так:
public static object[] CreateProperties(Type type, IProperty[] properties)
{
//Empty so return null
if (properties==null || properties.Length == 0)
return null;
//Check the type is allowed
CheckPropertyTypes("CreateProperties(Type,IProperty[])",type);
//Convert the array of intermediary IProperty objects into
// the passed service type e.g. Service1.Property
object[] result = new object[properties.Length];
for (int i = 0; i < properties.Length; i++)
{
IProperty fromProp = properties[i];
object toProp = ReflectionUtility.CreateInstance(type, null);
ServiceUtils.CopyProperties(fromProp, toProp);
result[i] = toProp;
}
return result;
}
Вот мой код вызова из одной из моих реализаций сервиса:
Property[] props = (Property[])ObjectFactory.CreateProperties(typeof(Property), properties);
_service.SetProperties(folderItem.Path, props);
Таким образом, каждый сервис предоставляет свой объект «Свойство», который я скрываю за собственной реализацией моего интерфейса IProperty.
Код отражения работает в модульных тестах, создавая массив объектов, элементы которых имеют соответствующий тип. Но вызывающий код не работает:
System.InvalidCastException: невозможно преобразовать объект типа 'System.Object []' в тип 'MyProject.Property []
Есть идеи?
У меня сложилось впечатление, что любое приведение из объекта будет работать до тех пор, пока содержащийся объект является конвертируемым?