编辑:显然题外话...移动到Programmers.StackExchange.com。
这不是一个实际问题,更像是一个谜。
问题
我很想知道是否有办法实现与以下内容等效的东西,但不使用yield
:
IEnumerable<T> Infinite<T>()
{
while (true) { yield return default(T); }
}
规则
- 您不能使用
yield
关键字 - 仅直接使用 C# 本身 - 没有 IL 代码,没有构建动态程序集等。
- 您只能使用基本的 .NET 库(仅
mscorlib.dll
,System.Core.dll
? 不知道还包括什么)。但是,如果您找到一些其他 .NET 程序集(WPF?!)的解决方案,我也很感兴趣。 - 不要实现 IEnumerable 或 IEnumerator。
笔记
我最近的一次:
IEnumerable<int> infinite = null;
infinite = new int[1].SelectMany(x => new int[1].Concat(infinite));
这是“正确的”,但在 14399 次迭代通过可枚举(不是完全无限)后会遇到 StackOverflowException。
我认为由于 CLR缺乏尾递归优化,可能无法做到这一点。证明会很好:)