c# - c#中的多个条件

标签 c#

while (playerMove != "SCISSORS" || playerMove != "PAPER" && playerMove != "ROCK" || string.IsNullOrEmpty(playerMove))
   {
     Console.WriteLine("Please enter a valid command!");
     playerChoice = Console.ReadLine().ToUpper().Trim();
     continue;
   }

有人可以向初级程序员解释为什么这段代码不起作用。 我自己阅读这段代码的方式是: 虽然 playerMove 不是“SCISSORS”或“PAPER”,也不是“ROCK”或 Empty,但执行此操作...

我如何使它工作?

最佳答案

如果您输入“PAPER”,则 playerMove != "SCISSORS" 为真,因此您的 while 条件为真,因为逻辑或只有一部分必须为真。

您希望 所有 !="XYZ" 为真,或者字符串为空:

while((playerMove != "SCISSORS" && playerMove != "PAPER" && playerMove != "ROCK") || string.IsNullOrEmpty(playerMove))

也就是说,可能有更简单的方法来检查这一点。

例如,您可以定义一个可接受的字符串列表,并对其进行检查:

using System.Linq;
...
var acceptedString = new List<string> {"ROCK", "PAPER", "SCISSORS"};
...
while (!acceptedStrings.Contains(playermove)
{
   // error message
}

实际上检查空字符串是没有用的,因为空字符串永远不会有可接受的值。

如评论中所述,另一种选择是将您的条件提取到方法中。对于复杂的情况,这几乎总是一个好主意:

while (!IsValid(playermove)){...}
...
private static bool IsValid(string move)
{
   return move == "ROCK"
       || move == "PAPER"
       || move == "SCISSORS";
}

或者您可以将其重写为

while (!IsValid(playermove)){...}
...
private static bool IsValid(string move) =>
    move == "ROCK" || move == "PAPER" || move == "SCISSORS";

关于c# - c#中的多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55206537/

相关文章:

c# - 可以生成 Excel 报告并将其推送到客户端计算机,而无需将文件保存在服务器中

c# - 异步/等待模型 View 演示者winforms

c# - 用于解析 C/C++ 函数声明的正则表达式

C# 列表到数组问题

c# - unity - 从 firebase 数据库中检索数据

c# - Resharper 更新项目中所有文件的命名空间

c# - 如何从 ListView 复制单个子项?

c# - 我是否总是必须等待一次性对象的异步方法而不是返回其任务?

c# - WS_EX_NOACTIVATE 和 WinForms 的两个问题

c# - 如何获得浏览量最高的前5名产品?