Uso de la reflexión Tengo un objeto que debo convertir en una lista iterativa de elementos (escriba unknown, será objeto). Utilizando la ventana Mirar puedo ver que mi objeto es una matriz de algún tipo, ya que me dice la cantidad de elementos y puedo hacer estallar la vista en árbol para ver los elementos.Objeto C# para la matriz
En primer lugar, necesito comprobar que el objeto pasado es algún tipo de matriz (podría ser List, might be object [], etc.). Entonces necesito iterar a través de esa matriz. Sin embargo, no puedo hacer la conversión de tipo.
Así es como lo estoy usando (abreviado):
private static void Example(object instance, PropertyInfo propInfo)
{
object anArray = propInfo.GetValue(instance, null);
ArrayList myList = anArray as ArrayList;
foreach (object element in myList)
{
// etc
}
}
He intentado varios moldes diferentes. Lo anterior no genera una excepción, pero mylist es nula cuando anArray realmente existe y contiene elementos. La instancia real que se guarda es una Lista fuertemente tipada <> pero podría tomar un subconjunto limitado de formularios si es necesario. Pero el objetivo del ejercicio es que este método de ejemplo() no conoce el tipo básico de la propiedad.
puede averiguar el tipo de objeto a partir de instance.GetType() y que se puede comparar con el tipo desirebale usando 'is', por ejemplo, 'if (instance.GetType() es IEnumerable)' – Tsar
@Bad Display Nombre que es ahora como funciona la palabra clave * is *, lo que está haciendo allí es intentar enviar desde System.Type a System.Collection.IEnumerable, which doesn No funciona porque System.Type no implementa esa interfaz. quizás quisiste decir ** typeof (IEnumerable) .IsAssignableFrom (instance.GetType()) ** – MattDavey