for循环-如何在C#中实现for else和foreach else,类似于Python';是给别人的吗

本文关键字:else for Python 别人 类似于 foreach 循环 实现 | 更新日期: 2023-09-27 18:00:57

Python的用于,而循环包括一个可选的else子句,如果循环正常退出(没有break语句(,则执行该子句。例如,在Python中,您可以编写以下代码:

for x in range(3):
    print(x)
else
    print("The loop exited normally")

输出将是:

0
1
2
The loop exited normally

你将如何在C#中完成类似的事情来编码如下内容:

for (int i = 0; i < 3; i++)
{
    Console.WriteLine(x);                  
}
else
    Console.WriteLine("The loop exited normally");

for循环-如何在C#中实现for else和foreach else,类似于Python';是给别人的吗

foreach else的Python构造如下:

foreach( elem in collection )
{
    if( condition(elem) )
        break;
}
else
{
    doSomething();
} 

else仅在foreach循环期间未调用break时执行

C#的等价物可能是:

bool found = false;
foreach( elem in collection )
{
    if( condition(elem) )
    {
        found = true;
        break;
    }
}
if( !found )
{
    doSomething();
}

来源:Visual C#开发者中心

确定:

  • 使用其他海报的花式建议之一

  • 使用执行循环的方法,而不是break,可以return来避免在循环下执行代码

  • 使用可以在break之前设置的布尔变量,并在循环之后进行测试

  • 使用goto而不是break

如果你问我的话,这是一个奇怪的模式。"Foreach"总是以开头,所以"else"这个词在那里没有意义。

如果您在Python中引用for-else和while-else构造,那么有一个基本的IEnumerable<T>扩展方法可以模拟本文中描述的foreach-else,实现如下:

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();
}

在谷歌上搜索它,我发现:http://www-jo.se/f.pfleger/.net-for-else

public static void ForEachElse<TSource>(
this IEnumerable<TSource> source,
Func<TSource>,
bool action,
Action @else
)  // end of parameters
{
foreach (var i in source)
  {
    if (!action(i))
      {
        return;
      }
  }
   @else();
}