.NET反射:如何循环一个数组类型的对象?

时间:2011-06-07 17:16:28

标签: c# .net reflection

我有一个方法返回一个数组,我在Type对象中存储的类型进一步向上。因此,我的代码就是:

Type StoryType = Type.GetType("my.ns.Story");
Type StoryTypeArray = Type.GetType("my.ns.Story[]");

object stories = SomeMethodInfo.Invoke(BigFatObject,some_params);

在这个例子中,我知道故事的类型为StoryTypeArray,我真正想做的是:

foreach (Story instance in stories) { ... }

然而,我无法弄清楚如何将对象stories转换成我可以循环并从中拉出数据的东西。

有什么想法吗?

2 个答案:

答案 0 :(得分:8)

从您的问题中不清楚在编译时您是否真正知道Story类型。如果是,解决方案是微不足道的;只需将stores投射到Story[]并像往常一样迭代它:

foreach(Story instance in (Story[])stories) { ... }

这也意味着StoryType可以写为typeof(Story)StoryTypeArray可以写为typeof(StoryTypeArray[]),而不是使用您不太安全的Type.GetType '正在使用。

如果在编译时您实际上不知道该类型,那么您将无法编写foreach(Story instance...,因为这不是有效类型。如果您只想迭代数组,那么您可以这样做:

foreach(object item in (Array)stories) { ... }

答案 1 :(得分:1)

如果出于某些原因你必须通过反思来做到这一点,这就是解决方案:

a.GetType().GetMethod("Get").Invoke(a, new object[]{0})