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

gro*_*wse 7 .net c# reflection

我有一个方法返回一个数组,我已经在Type对象中存储了它的类型.因此,我的代码是:

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

object stories = SomeMethodInfo.Invoke(BigFatObject,some_params);
Run Code Online (Sandbox Code Playgroud)

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

foreach (Story instance in stories) { ... }
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何将对象stories转换为我可以循环并从中拉出数据的东西.

有任何想法吗?

Ada*_*son 8

从您的问题中不清楚Story在编译时您是否真正知道该类型.如果是,解决方案是微不足道的; 只投storesStory[]和遍历它像往常一样:

foreach(Story instance in (Story[])stories) { ... }
Run Code Online (Sandbox Code Playgroud)

这也意味着,StoryType可以写成typeof(Story)StoryTypeArray可以书面typeof(StoryTypeArray[])使用不太安全,而不是Type.GetType您使用.

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

foreach(object item in (Array)stories) { ... }
Run Code Online (Sandbox Code Playgroud)

  • +1 - 我还建议对"IEnumerable"进行强制转换,然后尝试使用数据,例如:`故事为IEnumerable` (4认同)