gpt4 book ai didi

c# - 查找 IEnumerable 对象的类型

转载 作者:太空狗 更新时间:2023-10-30 00:25:23 26 4
gpt4 key购买 nike

对于我能做的大多数对象,

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com