Korzystając z odbicia, mam obiekt, który muszę wrzucić na listę elementów z możliwością iteracji (typ nieznany, będzie obiektem). Używając okna Watch widzę, że mój obiekt jest tablicą pewnego rodzaju, ponieważ informuje mnie o liczbie elementów i mogę rozbić widok drzewa, aby zobaczyć same elementy.Obiekt C# do tablicy
Najpierw muszę sprawdzić, czy przekazany obiekt jest jakimś rodzajem tablicy (może być List, może być obiektem [] itp.). Następnie muszę przetestować tę tablicę. Jednak nie mogę wykonać konwersji typu.
Oto jak używam go (w skrócie):
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
}
}
Próbowałem różnymi odlewane. Powyższe nie powoduje wyjątku, ale moja lista ma wartość null, gdy anArray faktycznie istnieje i zawiera elementy. Zapisywana rzeczywista instancja jest mocno wpisaną listą <>, ale w razie potrzeby może przyjąć ograniczony podzbiór formularzy. Ale celem ćwiczenia jest to, że ta metoda Example() nie zna podstawowego typu właściwości.
można dowiedzieć się, jaki rodzaj obiektu z instance.GetType() i można porównać go z rodzaju desirebale użyciem 'is', np 'if (instance.GetType() jest IEnumerable)' – Tsar
@Bad Display Name, tak jak teraz działa słowo kluczowe *, to co robisz, próbuje przesłać z System.Type do System.Collection.IEnumerable, co robi nie działa, ponieważ System.Type nie implementuje tego interfejsu. być może miałeś na myśli ** typeof (IEnumerable) .IsAssignableFrom (instance.GetType()) ** – MattDavey