检查字符串是否不等于某些东西不起作用

时间:2018-03-13 13:03:06

标签: c#

为什么这不起作用?即使answer的值为"Y""N"(我在调试器中检查过)并且我一直收到输入无效,while循环也不会结束消息。

        Console.Write("\nYes or No(Y or N): ");

        string answer = Console.ReadLine();

        while(!answer.Equals("Y") || !answer.Equals("N"))
        {
            invalidInput();
            answer = Console.ReadLine();
        }

3 个答案:

答案 0 :(得分:4)

为了避免此类错误(||而不是&&),请将其设为:

  // StringComparer.OrdinalIgnoreCase - let's ignore case and accept "n" or "YES"
  Dictionary<string, bool> validAnswers = new Dictionary<string, bool>(
    StringComparer.OrdinalIgnoreCase) {
       { "Y" , true},
       { "N", false},
       { "Yes" , true},
       { "No", false},
       // Add any other responses here, say {"OK", true}
  };

  Console.Write("\nYes or No(Y or N): ");

  bool answer = false;

  // Keep asking while answer is not valid one
  // .Trim() - let's be nice and allow leading and trailing spaces
  while (!validAnswers.TryGetValue(Console.ReadLine().Trim(), out answer)) {
    invalidInput();
  } 

答案 1 :(得分:1)

您可以将这两个条件放在括号中。 以下示例也不区分大小写。

Console.Write("\nYes or No(Y or N): ");
string answer = Console.ReadLine();
while (!(answer.ToUpper().Equals("Y") || answer.ToUpper().Equals("N")))
{
    invalidInput();
    answer = Console.ReadLine();
}

答案 2 :(得分:1)

字符串永远不能等于两个不同的字符串。每次answer.Equals("Y") answer.Equals("N")中的一个或两个都是假的。使用! ||时,整体表达式每次都为真。

我认为你在寻找

!answer.Equals("Y") && !answer.Equals("N")

!(answer.Equals("Y") || answer.Equals("N"))