Rzucanie obiektu do IEnumerable <T>, gdzie T nie jest znane
Próbuję grać z Reflection i wpadłem w następującą sytuację.
W poniższym kodzie załóżmy, że „obj” może być typówIEnumerable<>
lubICollection<>
lubIList<>
.
Chciałbym rzucić ten System.Object doIEnumerable<>
zawsze (jakICollection<>
iIList<>
odziedziczyć zIEnumerable<>
tak czy inaczej), więc chciałbym wyliczyć kolekcję i użyć refleksji do napisania poszczególnych elementów.
Motywacją stojącą za tym jest po prostu próbowanie sprawdzenia, w jaki sposób Serializery, ogólnie, serializują dane, a więc próbuję symulować tę sytuację w nadziei, że zrozumiemy również Refleksję.
Myślałem o rzuceniu obiektunie-rodzajowy IEnumerable, ale pomyślał, że spowoduje to niepotrzebne boksowanie obiektów, powiedzmy, że jest to rzeczywiste wystąpienieIEnumerable<int>
... mam rację?
private void WriteGenericCollection(object obj)
{
Type innerType = obj.GetType().GetGenericArguments()[0];
//Example: IEnumerable<int> or IEnumerable<Customer>
Type generatedType = typeof(IEnumerable<>).MakeGenericType(innerType);
//how could i enumerate over the individual items?
}