对于我能做的大多数对象,
obj.getType().FullName
但是对于下面的代码,
static void Main(string[] args)
{
IEnumerable<int> em = get_enumerable();
Console.WriteLine(em.GetType());
Console.Read();
}
static IEnumerable<int> get_enumerable()
{
for (int i = 0; i < 10; i++)
{
yield return i;
}
}
输出是,
ConsoleApplication1.Program+d__0
其中 ConsoleApplication1 是程序集,Program 是包含类(未显示)。为什么它不显示 IEnumerable 以及如何使 GetType 对这种情况更具描述性?
最佳答案
IEnumerable<T>
是一个开放通用类型。它不是实际类型;它只是一个构造具体(封闭)泛型类型的函数,如 IEnumerable<int>
.
IEnumerable<int>
是一个接口(interface);不可能有一个接口(interface)的实例。
您的迭代器函数实际上返回一个隐藏的编译器生成类的实例,该类实现了 IEnumerable<int>
;这就是你从 GetType()
看到的.
您想找到类型的 IEnumerable<T>
的泛型类型参数实现:
em.GetType().GetInterface("System.Collections.Generic.IEnumerable`1")
.GetGenericArguments()[0]
关于c# - 查找 IEnumerable 对象的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17408380/