Nie można rzutować obiektu typu „System.Object []” na „MyObject []”, co daje?
Scenariusz:
Obecnie piszę warstwę, aby streścić 3 podobne serwisy WWW w jedną użyteczną klasę. Każda usługa internetowa udostępnia zbiór obiektów, które mają wspólne cechy. Stworzyłem zestaw obiektów pośrednich, które wykorzystują wspólność. Jednak w mojej warstwie muszę konwertować między obiektami usługi sieciowej a moimi obiektami.
Użyłem refleksji, aby utworzyć odpowiedni typ w czasie wykonywania, zanim wykonam połączenie z usługą internetową w następujący sposób:
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;
}
Oto mój kod wywoławczy z jednej z moich implementacji usług:
Property[] props = (Property[])ObjectFactory.CreateProperties(typeof(Property), properties);
_service.SetProperties(folderItem.Path, props);
Tak więc każda usługa ujawnia inny obiekt „Właściwość”, który chowam za własną implementacją interfejsu IProperty.
Kod refleksyjny działa w testach jednostkowych, tworząc tablicę obiektów, których elementy są odpowiedniego typu. Ale kod wywołujący zawodzi:
System.InvalidCastException: Nie można rzutować obiektu typu „System.Object []” na typ „MyProject.Property []
Jakieś pomysły?
Miałem wrażenie, że każdy rzut z Object będzie działał tak długo, jak długo zawarty obiekt można konwertować?