Potrzebuję sprawdzić poprawność obiektu, aby zobaczyć, czy jest on pusty, typ wartości lub IEnumerable<T>
, gdzie T
jest typem wartości. Do tej pory mam:Jak dowiedzieć się, czy typ obiektu jest podklasą IEnumerable <T> dla dowolnego typu wartości T?
if ((obj == null) ||
(obj .GetType().IsValueType))
{
valid = true;
}
else if (obj.GetType().IsSubclassOf(typeof(IEnumerable<>)))
{
// TODO: check whether the generic parameter is a value type.
}
więc znalazłem, że obiekt jest null, typ wartości, lub IEnumerable<T>
dla niektórych T
; jak sprawdzić, czy ten T
jest typem wartości?
Czy GetInterfaces wystarczająco rekurencyjne oznaczać nie trzeba się martwić o dzieje się rodzica typy? –
@Jon: Tak myślę, tak. –
Nie potrzebujesz rekursji. Klasa albo implementuje interfejs, albo nie. Jest to płaska lista, niezależnie od tego, jak interfejsy się "dziedziczą" nawzajem. – Tar