我试图枚举实际可枚举的对象,但类型存储在type变量中
public Type MyListType { get; set; }
public Object MyList { get; set; }
...
foreach (var item in Convert.ChangeType(MyList, MyListType))
{
...
}这显然会产生一个错误,因为ChangeType仍然返回对象。如何将MyList转换为可枚举类型,特别是MyListType类型?
更新:
更清楚的是,对象是BindingList<T>类型,其中T驻留在MyListType中。
发布于 2014-08-20 16:48:30
如果它实际上是可枚举的,那么大概它实现了IEnumerable..。所以你可以用:
foreach (object item in (IEnumerable) MyList)
{
...
}无论如何,item的编译时类型不会比object更好.
发布于 2014-08-20 16:54:02
如果该类型实际上实现了IEnumerable,则只需将其转换为:
foreach (object item in (IEnumerable) MyList)
{
//...
}如果该类型的GetEnumerator方法满足foreach的条件,使其在概念意义上是可枚举的,但没有实际实现IEnumerable,那么您需要使用dynamic将问题推迟到运行时,此时它将能够确定要动态调用的方法。
foreach (object item in (dynamic) MyList)
{
//...
}(请注意,虽然这是一个有趣的学术练习,但我真的希望您在实际的生产代码中没有这样的对象;您几乎肯定不应该在实验之外使用这个解决方案。)
https://stackoverflow.com/questions/25410203
复制相似问题