检查IEnumerable<T>yield关键字是否生成的正确方法是什么?
样品:
public IEnumerable<int> GetMeSomeInts()
{
// Unknown implementation
}
Run Code Online (Sandbox Code Playgroud)
某处:
IEnumerable<int> someInts = GetMeSomeInts() ;
if (someInts is generatedbyayield) // <- What should be this condition ?
someInts = someInts.ToList() ;
Run Code Online (Sandbox Code Playgroud)
由yield关键字创建的状态机不是"可检测的".如果您找到一种方法来检测它,您将不得不依赖于某些特定于实现的提示(例如类型名称的特定模式;您的问题的注释中给出了一些示例),这些不是C#的一部分spec,因此,可能随时改变.
因此,没有正确的方法来检查IEnumerable<T>yield关键字是否生成了一个.我认为正确的方法是不检查.这就是接口的用途:它们隐藏了实现.
既然你没有提到为什么你想知道IEnumerable是否是由yield关键字生成的,我会猜测并假设你真正想要问的是:
如果IEnumerable尚未实现,我怎样才能实现?
这个问题已经得到了回答:
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |