首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何枚举对象?

如何枚举对象?
EN

Stack Overflow用户
提问于 2014-08-20 16:46:14
回答 2查看 147关注 0票数 0

我试图枚举实际可枚举的对象,但类型存储在type变量中

代码语言:javascript
运行
复制
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中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-20 16:48:30

如果它实际上是可枚举的,那么大概它实现了IEnumerable..。所以你可以用:

代码语言:javascript
运行
复制
foreach (object item in (IEnumerable) MyList)
{
    ...
}

无论如何,item的编译时类型不会比object更好.

票数 5
EN

Stack Overflow用户

发布于 2014-08-20 16:54:02

如果该类型实际上实现了IEnumerable,则只需将其转换为:

代码语言:javascript
运行
复制
foreach (object item in (IEnumerable) MyList)
{
    //...
}

如果该类型的GetEnumerator方法满足foreach的条件,使其在概念意义上是可枚举的,但没有实际实现IEnumerable,那么您需要使用dynamic将问题推迟到运行时,此时它将能够确定要动态调用的方法。

代码语言:javascript
运行
复制
foreach (object item in (dynamic) MyList)
{
    //...
}

(请注意,虽然这是一个有趣的学术练习,但我真的希望您在实际的生产代码中没有这样的对象;您几乎肯定不应该在实验之外使用这个解决方案。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25410203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档