一个很好的干净方法是首先声明一个enum
来表示答案值。需要“是”、“否”and“未定义”(后者代表既不是“是”也不是“否”的答案):
public enum YesOrNo
{
Undefined,
Yes,
No
}
然后您可以将是/否检测逻辑包装在一个类中。有很多方法可以做到这一点;这是一个简单的(您可以使用字典来代替,但对于如此少量的字符串来说,这并不是真正必要的,我试图使其尽可能简单):
public static class YesOrNoDetector
{
static readonly string[] _yesAnswers = { "yes", "y", "yep", "yeah", "affirmative" };
static readonly string[] _noAnswers = { "no", "n", "nah", "nope", "negative" };
public static YesOrNo Detect(string answer)
{
if (_yesAnswers.Contains(answer.ToLower()))
return YesOrNo.Yes;
if (_noAnswers.Contains(answer.ToLower()))
return YesOrNo.No;
return YesOrNo.Undefined;
}
}
(注意它如何通过在比较之前将字符串转换为小写来处理大写答案。)
那么你原来的代码就变成了这样:
switch (YesOrNoDetector.Detect(response))
{
case YesOrNo.Yes:
{
goto ThreeTwo; // Please get rid of this goto!
}
case YesOrNo.No:
{
// Handle "No".
break;
}
case YesOrNo.Undefined:
{
// Handle incorrect answer.
break;
}
}