我试图枚举实际可枚举的Object,但该类型存储在Type变量
中public Type MyListType { get; set; }
public Object MyList { get; set; }
...
foreach (var item in Convert.ChangeType(MyList, MyListType))
{
...
}
这显然会产生错误,因为ChangeType仍会返回Object。如何将MyList转换为可枚举类型,尤其是MyListType?
更新
更明确一点,Object是BindingList<T>
类型,其中T驻留在MyListType中。
答案 0 :(得分:5)
好吧,如果实际可枚举,可能是它实现了IEnumerable
...所以你可以使用:
foreach (object item in (IEnumerable) MyList)
{
...
}
无论如何,item
的编译时类型不会比object
更好......
答案 1 :(得分:0)
如果类型实际实现IEnumerable
,您只需将其强制转换为:
foreach (object item in (IEnumerable) MyList)
{
//...
}
如果类型的GetEnumerator
方法符合foreach
的条件,从概念上讲可以枚举,但实际上没有实现IEnumerable
,那么您需要使用dynamic
将问题推迟到运行时,此时它将能够确定动态调用哪个方法。
foreach (object item in (dynamic) MyList)
{
//...
}
(请注意,虽然这是一个有趣的学术练习,但我真的希望你在实际的生产代码中实际上没有这样的对象;你几乎肯定不应该在实验。)