如果我有一个IEnumerator变量,有没有可能有一个拉姆达函数接受它,用MoveNext()推进它,并在每次调用它时返回当前值?
发布于 2008-09-16 14:36:12
e => e.MoveNext() ? e.Current : null这将推进枚举器并返回当前值,并在枚举完成时返回null。
发布于 2008-09-16 14:33:01
Lambda表达式可以包含复杂的语句,因此可以执行以下操作:
Func<IEnumerator, object> f = ie => { ie.MoveNext(); return ie.Current; };发布于 2008-09-16 14:38:55
这就是你要找的东西吗?
List<string> strings = new List<string>()
{
"Hello", "I", "am", "a", "list", "of", "strings."
};
IEnumerator<string> e = strings.GetEnumerator();
Func<string> f = () => e.MoveNext() ? e.Current : null;
for (; ; )
{
string str = f();
if (str == null)
break;
Console.Write(str + " ");
}IEnumerator的意义在于你已经得到了处理它的语法糖:
foreach (string str in strings)
Console.Write(str + " ");在这种情况下,即使直接处理枚举数也看起来更干净:
while (e.MoveNext())
Console.Write(e.Current + " ");https://stackoverflow.com/questions/72913
复制相似问题