Предполагая, что getUserInput(..)
может быть преобразовано в выражение с логическим значением * ..
while (getUserInput()
&& isBadInput()) {
doSomethingElse();
}
// Prompts for user input, returns false on a user-abort (^C)
private bool getUserInput() { .. }
Другие варианты (предположительно без нелокального состояния), показанные в комментариях.
* Тривиально, это всегда можно записать в виде функции обтекания - см. Локальные функции , введенные в C # 7. (Существуют другие методы для того же эффекта, некоторые из которых я считаю «слишком умными».)
// local function
bool getUserInputAlwaysTrue() {
getUserInput(); // assume void return
return true;
}
while (getUserInputAlwaysTrue()
&& isBadInput()) {
doSomethingElse();
}
В некоторых случаях это может сопровождаться дальнейшим выталкиванием логики c. Общая посылка гласит: getUserInput()
всегда вызывается до следующего isBadInput()
.
// local function or member method
// Prompt for user input, returning true on bad input.
bool getCheckedUserInput() {
getUserInput(); // assume void return
return isBadInput();
}
while (getCheckedUserInput()) {
doSomethingElse();
}