First of all, the original code isn't terrible IMO. It's pretty understandable and there's nothing inherently bad in it.
Then if you dislike it, building up on @Ewan's idea to use a list but removing his somewhat unnatural foreach break
pattern:
public class conditions
{
private List<Condition> cList;
private int position;
public Condition Head
{
get { return cList[position];}
}
public bool Next()
{
return (position++ < cList.Count);
}
}
while not conditions.head.check() {
conditions.next()
}
conditions.head.alert()
Now adapt this in your language of choice, make each element of the list an object, a tuple, whatever, and you're good.
EDIT: looks like it isn't as clear I thought, so let me explain further. conditions
is an ordered list of some sort; head
is the current element being investigated - at the beginning it is the first element of the list, and each time next()
is called it becomes the following one; check()
and alert()
are the checkConditionX()
and addAlert(X)
from the OP.