Ну, вы могли бы иметь:
Func<bool> condition = ...;
while (condition())
{
}
Это то, о чем ты думаешь? Это не совсем понятно ...
РЕДАКТИРОВАТЬ: В приведенном вами примере, я бы использовал что-то вроде:
private static readonly MyEnum[] BreakEnumValues = {
MyEnum.BreakIfYouGetThis,
MyEnum.AlsoBreakIfYouGetThis
};
...
while (!BreakEnumValues.Contains(GetMyEnumValueFromDB()))
{
...
}
Или:
private static bool ShouldBreak(MyEnum enumFromDatabase)
{
return enumFromDatabase == MyEnum.BreakIfYouGetThis ||
enumFromDatabase == MyEnum.AlsoBreakIfYouGetThis;
}
...
while (!ShouldBreak(GetMyEnumValueFromDB))
{
...
}
РЕДАКТИРОВАТЬ: Чтобы противостоять ответу KeithS, это полностью верно:
while (new Func<bool>(() => {
Console.WriteLine("Evaluating...");
return true;
})()) {
Console.WriteLine("In loop");
count++;
if (count == 5)
{
break;
}
}
Это ужасно, но это действительно. (Это можно сделать чуть менее ужасным, явно вызвав Invoke
, но это все же не очень приятно.)