首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#中实现类似于Python的for-else和foreach-else?

如何在C#中实现类似于Python的for-else和foreach-else?
EN

Stack Overflow用户
提问于 2011-07-01 11:12:06
回答 4查看 19.9K关注 0票数 11

Python的for和while循环包括一个可选的Python子句,如果循环正常退出,该子句将执行该子句(即,不带break语句)。例如,在Python中可以编写以下代码:

代码语言:javascript
复制
for x in range(3):
    print(x)
else
    print("The loop exited normally")

产出如下:

代码语言:javascript
复制
0
1
2
The loop exited normally

您将如何在C#中完成类似的任务,以便编写如下代码:

代码语言:javascript
复制
for (int i = 0; i < 3; i++)
{
    Console.WriteLine(x);                  
}
else
    Console.WriteLine("The loop exited normally");
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-01 11:19:30

foreach- Python的Python构造如下所示:

代码语言:javascript
复制
foreach( elem in collection )
{
    if( condition(elem) )
        break;
}
else
{
    doSomething();
} 

只有在foreach循环期间未调用中断的情况下,才会执行。

对应的C#可能是:

代码语言:javascript
复制
bool found = false;
foreach( elem in collection )
{
    if( condition(elem) )
    {
        found = true;
        break;
    }
}
if( !found )
{
    doSomething();
}

来源:VisualC#开发人员中心

票数 21
EN

Stack Overflow用户

发布于 2011-07-01 11:20:00

当然:

  • 用另一张海报上的花哨建议
  • 使用一个执行循环的方法,而不是break,您可以使用return来避免在循环下面执行代码。
  • 使用可以在break之前设置的布尔变量,并在循环之后进行测试。
  • 使用goto而不是break

不过,如果你问我的话,这是个奇怪的模式。"Foreach“总是以”there“这个词开头,所以在这里没有意义。

票数 6
EN

Stack Overflow用户

发布于 2011-07-01 11:18:01

如果您指的是Python中的for- the和while-else构造。,则有一个基本的IEnumerable<T>扩展方法,它模拟这篇文章中描述的foreach-else,其实现如下:

代码语言:javascript
复制
public static void ForEachElse<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource, bool> action, Action @else)
{
    foreach (var i in source)
    {
        if (!action(i))
        {
            return;
        }
    }
    @else();
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6547195

复制
相关文章

相似问题

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