Я имею в виду следующее:
bool passed = true;
for(int i = 0; i < collection.Length; i++)
{
if(!PassesTest(collection[i]))
{
passed = false;
break;
}
}
if(passed){/*passed code*/}
требует дополнительной переменной, дополнительного теста
for(int i = 0; i < collection.Length; i++)
{
if(!PassesTest(collection[i]))
{
return;
}
}
{/*passed code*/}
аккуратно, но требует, чтобы это было его собственной функцией, если это self внутри циклаили что-то, не самый эффективный способ ведения дел.Кроме того, написание целой дополнительной функции - боль
if(passed){/*passed code*/}
for(int i = 0; i < collection.Length; i++)
{
if(!PassesTest(collection[i]))
{
goto failed;
}
}
{/*passed code*/}
failed: {}
замечательно, но вы должны разбираться с названиями ярлыков и уродливым синтаксисом ярлыков
for(int i = 0; ; i++)
{
if(!(i < collection.Length))
{
{/*passed code*/}
break;
}
if(!PassesTest(collection[i]))
{
break;
}
}
, вероятно, самый красивый, но все женемного ручной, вроде как тратить функциональность конструкции цикла for, например, вы не можете сделать это с помощью foreach
Какой самый лучший способ решить эту проблему?
кажется,мне что-то вроде этого было бы неплохо: foreach (...) {...} finally {...} // выполняется только в том случае, если цикл заканчивается обычным образом (без прерывания)
я что-то упустил?потому что это очень распространенная проблема для меня, и мне не очень нравятся какие-либо решения, которые я придумаю.
Я использую c ++ и C #, поэтому решения в любом из них были бы хорошими.но также будет заинтересован в решениях на других языках.(хотя принцип дизайна, который избегает этого на любом языке, был бы идеальным)