我知道它们不存在,但有替代品吗?像这样:
for (int i = 0; !connected && i < 100; i++)
{
Thread.Sleep(1);
}
else throw new ConnectionError();
答案 0 :(得分:15)
foreach-else的Python Construct是这样的:
foreach( elem in collection )
{
if( condition(elem) )
break;
}
else
{
doSomething();
}
如果在foreach循环期间没有调用break,则只执行else
等效的C#可能是:
bool found = false;
foreach( elem in collection )
{
if( condition(elem) )
{
found = true;
break;
}
}
if( !found )
{
doSomething();
}
答案 1 :(得分:4)
如果您引用的是the for-else and while-else constructs in Python,则会有一个基本的IEnumerable<T>
扩展方法,模拟this article中描述的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();
}
答案 2 :(得分:4)
谷歌搜索它给了我: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();
}
答案 3 :(得分:4)
不确定
使用其他海报的其中一个奇特的建议
使用执行循环的方法,而不是break
,您可以return
避免在循环下执行代码
使用您可以在break
之前设置的布尔变量,并在循环后测试
使用goto
代替break
如果你问我,这是一种奇怪的模式。 “Foreach”总是开始,因此“else”这个词在那里没有意义。