Casting um objeto para IEnumerable <T> onde T não é conhecido
Estou tentando brincar com o Reflection e corri para a seguinte situação.
No código a seguir, vamos supor que o 'obj' pode ser de tiposIEnumerable<>
ouICollection<>
ouIList<>
.
Eu gostaria de lançar este System.Object paraIEnumerable<>
sempre (comoICollection<>
eIList<>
herdar deIEnumerable<>
de qualquer maneira), de modo que eu gostaria de enumerar sobre a coleção e usar a reflexão para escrever os itens individuais.
Motivação por trás disso é que eu estou apenas tentando ver como serializadores Serializers, em geral, serializar dados e por isso estou tentando simular essa situação na esperança de entender a reflexão também.
Eu pensei em lançar o objeto paraIEnumerable não genérico, mas pensei que isso causaria boxe desnecessário de objetos, quando vamos dizer a instância real deIEnumerable<int>
... estou pensando certo?
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?
}