首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有可能推进一个枚举数并在lambda中获取它的值?

有没有可能推进一个枚举数并在lambda中获取它的值?
EN

Stack Overflow用户
提问于 2008-09-16 14:28:36
回答 4查看 1.9K关注 0票数 1

如果我有一个IEnumerator变量,有没有可能有一个拉姆达函数接受它,用MoveNext()推进它,并在每次调用它时返回当前值?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-09-16 14:36:12

代码语言:javascript
复制
e => e.MoveNext() ? e.Current : null

这将推进枚举器并返回当前值,并在枚举完成时返回null。

票数 4
EN

Stack Overflow用户

发布于 2008-09-16 14:33:01

Lambda表达式可以包含复杂的语句,因此可以执行以下操作:

代码语言:javascript
复制
Func<IEnumerator, object> f = ie => { ie.MoveNext(); return ie.Current; };
票数 1
EN

Stack Overflow用户

发布于 2008-09-16 14:38:55

这就是你要找的东西吗?

代码语言:javascript
复制
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的意义在于你已经得到了处理它的语法糖:

代码语言:javascript
复制
foreach (string str in strings)
    Console.Write(str + " ");

在这种情况下,即使直接处理枚举数也看起来更干净:

代码语言:javascript
复制
while (e.MoveNext())
    Console.Write(e.Current + " ");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档