我正在尝试使用 Reflection 并遇到以下情况。
在下面的代码中,我们假设 'obj' 的类型可以是IEnumerable<>
orICollection<>
或IList<>
。
我想将此 System.Object 强制转换为IEnumerable<>
始终(作为ICollection<>
并IList<>
继承自IEnumerable<>
),以便我想枚举集合并使用反射来编写各个项目。
这背后的动机是我只是想看看序列化器通常如何序列化数据,所以我试图模拟这种情况,希望也能理解反射。
我想过将对象转换为非通用 IEnumerable,但认为这会导致不必要的对象装箱,当我们说IEnumerable<int>
...的实际实例时,我想对了吗?
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?
}