Escenario:No se puede lanzar el objeto de tipo 'System.Object []' a 'MyObject []', ¿qué ofrece?
Actualmente estoy escribiendo una capa para abstraer 3 servicios web similares en una clase utilizable. Cada servicio web expone un conjunto de objetos que comparten características comunes. He creado un conjunto de objetos intermedios que explotan lo que es común. Sin embargo, en mi capa, necesito convertir los objetos del servicio web a mis objetos.
He usado la reflexión para crear el tipo adecuado en tiempo de ejecución antes de hacer la llamada al servicio web de esta manera:
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;
}
Aquí está mi código de llamada, de uno de mis implementaciones de servicios:
Property[] props = (Property[])ObjectFactory.CreateProperties(typeof(Property), properties);
_service.SetProperties(folderItem.Path, props);
De modo que cada servicio expone un objeto "Propiedad" diferente que oculto detrás de mi propia implementación de mi interfaz IProperty.
El código de reflexión funciona en pruebas unitarias produciendo una matriz de objetos cuyos elementos son del tipo apropiado. Sin embargo, el código de llamada falla:
System.InvalidCastException: No se puede fundido objeto de tipo 'System.Object []' para escribir 'MyProject.Property []
¿Alguna idea?
¿Estaba bajo la impresión de que cualquier yeso de Object funcionará mientras el objeto contenido sea convertible?
Bueno, dije "En C# 2.0 y superior, los genéricos suelen ser una mejor opción que la matriz de covarianzas". Me temo que tuve que cancelar mi +1 en su última publicación en +1 esto ... Estoy fuera por hoy ... –
Podría decirse que devuelve algo un poco dudoso para el caso Length == 0 - I Devolvería una matriz vacía yo mismo ... –
Editado para eliminar la acusación :) Y sí, devolver nulo es posiblemente un poco dudoso, pero esa es una cuestión que el OP debe decidir :) –