c# - 结束 else if 语句 C#

标签 c# if-statement

除了 if 语句之外,我不知道在这种情况下还能使用什么。

我想做的是从 Windows 表单中获取一个值字符串方向;,并检查它是否具有我正在寻找的值。然后检查turtleDir是否是一个字符串值,指示turtleDir的方向。

问题出现在 else if 语句处,当 turtleDirlookingleft 时,它会执行所有 else if 语句。我希望它做的是在完成 else if 语句之后它需要停止并等待下一个命令。不检查所有的陈述。

有人可以告诉我如何修复它以及我做错了什么吗?

这是代码:

else if ( Program.form.direction == "right" ) 
{
   if ( turtleDir == "left" )
   {
      angle = -1.6f;
      turtleDir = "lookingLeft";
      Program.form.direction = "";
   }
   else if ( turtleDir == "lookingLeft" )
   {
      angle = 3.15f;
      turtleDir = "lookingDown";
   }
   else if ( turtleDir == "lookingDown" )
   {
      angle = 1.6f;
      turtleDir = "lookingRight";
   }
   else if ( turtleDir == "lookingRight" )
   {
      angle = 0.0f;
      turtleDir = "lookingUp";   
   }
}

最佳答案

您也可以在字符串上使用 switch 语句:

switch (turtleDir) {
    case "left":
        angle = -1.6f;
        turtleDir = "lookingLeft";
        Program.form.direction = "";
        break;
    case "lookingLeft":
        angle = 3.15f;
        turtleDir = "lookingDown";
        break;
    // other cases
}

这样,switch block 总是在指令完成后退出。您还可以通过在末尾添加 case default: 来指定当字符串与这些值都不匹配时要执行的操作。请记住,每种情况都需要通过 break 语句(或 return/throw 终止,但我认为您不需要此中的那些案件)。

如果仍然执行每个案例,那么您的问题出在其他地方。如果一个方法包含此代码并且从例如开始调用turtleDir == "left",每次连续调用该方法都会让 turtleDir 循环,直到执行完每个 case 并且 turtleDir 最终得到最终值“lookingUp”。因此,请查看您的控制流程,并跟踪您是否已执行此检查。也许跟踪耗时并仅在它处于特定状态一段时间后才更改 turtleDir (我不知道您的要求)。

编辑:您应该在每个case语句中设置Program.form.direction = ""。这就是为什么你的代码会被一遍又一遍地执行。另外,如果没有输入方向,也将其清除。

关于c# - 结束 else if 语句 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10845556/

相关文章:

c# - 在 .Net 3.5 中使用 Ninject 时 System.Core 的 System.Io.FileNotFoundException

c++ - 使用 IF 语句比较两个整数

c# - 系统.Data.OleDb.OleDbException : Data type mismatch in criteria expression

c# - 将复杂对象从 View 传递到 Controller

c# - 在 C# WPF 桌面应用程序中将 ViewModel 的属性分配给另一个 ViewModel 的属性

c# - gridview 和 if 语句

jQuery 和 Javascript If/Else

regex - 使用 bash 脚本逐行读取文件

excel - 扫描列以查找匹配的文本并将结果粘贴到另一列中

c# - Azure function 2.x ILogger 与.net core ILogger 不兼容?