Trzeba sprawdzić otwarty ogólny typ każdego interfejsu, który implementuje klasy, takie jak tak:
bool implements = typeof(T).GetInterfaces().Where(t => t.IsGenericType &&
t.GetGenericTypeDefinition() == typeof(IEnumerable<>)).Any();
to pozwoli Ci określić, czy dany typ implementuje IEnumerable<T>
bez faktycznie wiedząc, co typ T
jest. Pamiętaj, że ten typ może wielokrotnie implementować IEnumerable<T>
.
Jeśli chcesz po prostu sekwencji typów, które są parametrami typu dla IEnumerable<T>
, możesz zmienić powyższe zapytanie na;
IEnumerable<Type> types = typeof(T).GetInterfaces().
Where(t => t.IsGenericType &&
t.GetGenericTypeDefinition() == typeof(IEnumerable<>)).
Select(t => t.GetGenericArguments()[0]);
Jeśli 'param' nie jest typu' IEnumerable ', czy chcesz coś zrobić? Jeśli nie, to dlaczego ograniczyć 'T' do typu' IEnumerable 'z [where] (http://msdn.microsoft.com/en-us/library/bb384067.aspx)? –
Możliwe odpowiedzi tutaj: http://stackoverflow.com/questions/1846671/determine-if-collection-is-of-type-ienumerablet –
odpowiedzi na przepełnienie stosu postu [kliknij tutaj] [1] [1]: http://stackoverflow.com/questions/906499/getting-type-t-from-ienumerablet –