在反射中IEnumerable的问题

时间:2011-05-10 13:12:19

标签: c# ienumerable

  

可能重复:
  How to iterate the List in Reflection
  Problem with IEnumerable in Reflection

您好,

我在反思中迭代列表时遇到了问题。

var item = property.GetValue(obj,null); // We dont know the type of obj as it is in Reflection.

foreach(var value in (item as IEnumerable))
 {
   //Do stuff
  }

如果我这样做,我会得到像

这样的错误

使用泛型类型'System.Collections.Generic.IEnumerable'需要1个类型参数

请帮帮我。

2 个答案:

答案 0 :(得分:9)

类型IEnumerable与通用类型IEnumerable<T>之间存在差异。目前它认为你的意思是通用的,因为你已经包含了命名空间System.Collections.Generic;错误消息正在抱怨,因为您没有正确编写IEnumerable<T>泛型类型。

非通用IEnumerable类型在System.Collections命名空间中声明,因此添加对它的引用。 (using System.Collections;)。

如果你的意思是使用泛型类型,那么你应该有这样的东西:foreach(var value in (item as IEnumerable<string>))其中string是对象item枚举的类型。

请参阅IEnumerableIEnumerable<T>以及此information about generic types.

答案 1 :(得分:0)

如评论中所述,您已经问过这个问题。虽然这个实例的问题略有不同。您收到编译器错误,因为您在源文件中包含System.Collections.Generic命名空间(top using using子句)。该命名空间包含IEnumerable的通用版本 - &gt; IEnumerable<T>。你的演员因此而失败。如果你想使用IEnumerable add “using System.Collections”。