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ć?

questionAnswers(6)

yourAnswerToTheQuestion