我想使用 anIEnumerable
来生成一系列值——特别是类似 Excel 的列标题列表。
private IEnumerable<string> EnumerateSymbolNames()
{
foreach (var sym in _symbols)
{
yield return sym;
}
foreach (var sym1 in _symbols)
{
foreach (var sym2 in _symbols)
{
yield return sym1 + sym2;
}
}
yield break;
}
private readonly string[] _symbols = new string[] { "A", "B", "C", ...};
如果我从foreach
循环中获取值,这可以正常工作。但我想要的是使用迭代器块作为状态机并获取下一个可用的列标题以响应用户操作。而这——消耗生成的值——是我遇到麻烦的地方。
到目前为止我已经尝试过
return EnumerateSymbolNames().Take(1).FirstOrDefault();
return EnumerateSymbolNames().Take(1).SingleOrDefault();
return EnumerateSymbolNames().FirstOrDefault();
var enumerator = EnumerateSymbolNames().GetEnumerator();
enumerator.MoveNext();
return enumerator.Current;
...但这些都没有奏效。(所有都重复返回“A”。)基于对这个问题的回答,我想知道我想要的甚至是可能的——尽管对该帖子的一些回复提出了与我上一个类似的技术。
不,这不是家庭作业:)