由yield关键字创建的状态机不是"可检测的".如果您找到一种方法来检测它,您将不得不依赖于某些特定于实现的提示(例如类型名称的特定模式;您的问题的注释中给出了一些示例),这些不是C#的一部分spec,因此,可能随时改变.
因此,没有正确的方法来检查IEnumerable
yield关键字是否生成了一个.我认为正确的方法是不检查.这就是接口的用途:它们隐藏了实现.
既然你没有提到为什么你想知道IEnumerable是否是由yield关键字生成的,我会猜测并假设你真正想要问的是:
如果IEnumerable尚未实现,我怎样才能实现?
这个问题已经得到了回答:
有没有办法记住或物化IEnumerable?