if 语句

  if 语句的功能比较多,是有效的决策方式。与 : 语句不同的是,if 语句没有结果(所以不在赋值语句中使用它),使用该语句是为了根据条件执行其他语句。

if 语句最简单的语法如下:

  1. if (<test>)
  2. <code executed if <test> is true>;

  先执行 <test>(其计算结果必须是一个布尔值,这样代码才能编译),如果 <test> 的计算结果是 true,就执行该语句之后的代码。这段代码执行完毕后,或者因为 <test> 的计算结果是 false,而没有执行这段代码,将继续执行后面的代码行。

  也可将 else 语句和 if 语句合并使用,指定其他代码。如果 <test> 的计算结果是 false,就执行 else 语句:

  1. if (<test>)
  2. <code executed if <test> is true>;
  3. else
  4. <code executed if <test> is false>;

  可使用成对的花括号将这两段代码放在多个代码行上:

  1. if (<test>)
  2. {
  3. <code executed if <test> is true>;
  4. }
  5. else
  6. {
  7. <code executed if <test> is false>;
  8. }

  例如,重新编写上一节使用三元运算符的代码:

  1. string resultString = (myInteger < 10) "Less than 10"
  2. : "Greater than or equal to 10";

  因为 if 语句的结果不能赋给一个变量,所以要单独将值赋给变量:

  1. string resultString;
  2. if(myInteger < 10)
  3. resultString = "Less than 10";
  4. else
  5. resultString = "Greater than or equal to 10";

  这样的代码尽管比较冗长,但与三元运算符相比,更便于阅读和理解,也更加灵活。

下面的示例演示了 if 语句的用法。

把下列代码添加到 Program.cs 中:

  1. static void Main(string[] args)
  2. {
  3. string comparison;
  4. Console.WriteLine("Enter a number");
  5. double var1 = Convert.ToDouble(Console.ReadLine());
  6. Console.WriteLine("Enter anther number");
  7. double var2 = Convert.ToDouble(Console.ReadLine());
  8. if(var1 < var2)
  9. comparison = "less than";
  10. else
  11. {
  12. if(var1 == var2)
  13. comparison = "equal to";
  14. else
  15. comparison = "greater than";
  16. }
  17. Console.WriteLine("The first number is {0} the second number.", comparison);
  18. Console.ReadKey();
  19. }
示例的说明我们已经很熟悉了代码的第一部分,它从用户输入中得到两个 double 值:

  1. string comparison;
    Console.WriteLine("Enter a number");
    double var1 = Convert.ToDouble(Console.ReadLine());
    Console.WriteLine("Enter anther number:");
    double var2 = Convert.ToDouble(Console.ReadLine());


接着根据 var1var2 的值,将一个字符串赋给 string 变量 comparison。首先看看 var1 是否小于 var2

  1. if(var1 < var2)
    comparison = "less than";


如果不是,则 var1 大于或等于 var2。在第一个比较操作的 else 部分,需要嵌套第二个比较:

  1. else
    {
    if(var1 == var2)
    comparison = "equal to";
    // 只有在 var1 大于 var2 时,才执行第二个比较操作中的 else 部分:
    else
    comparison = "greater than";
    }


这里使用的嵌套只是进行这些比较的一种方式,还可以编写如下代码:

  1. if(var1 < var2)
    comparison = "less than";
    if(var1 == var2)
    comparison = "equal to";
    if(var1 > var2)
    comparison = "greater than";


  这个方式的缺点在于无论 var1var2 的值是什么,都要执行3个比较操作。在第一种方式中,如果 var1 < var2true,就只执行一个比较,否则就要执行两个比较操作(还执行了 var1 == var2 比较操作),这样将使执行的代码行比较少。在本例中性能上的差异较小,但在较重视速度的应用程序中,性能的差异就很明显了。

使用 if 语句判断更多条件

在上面的示例中,检查了涉及 var1 的值的3个条件,包括了这个变量所有可能的值。有时要检查特定的值,例如,var1 是否等于 1、2、3或4等。使用上面那样的代码会得到很多烦人的嵌套代码:

  1. if(var1 == 1)
  2. {
  3. // Do something.
  4. }
  5. else
  6. {
  7. if(var1 == 2)
  8. {
  9. // Do something else.
  10. }
  11. else
  12. {
  13. if(var1 == 3 || var1 == 4)
  14. {
  15. // Do something else.
  16. }
  17. else
  18. {
  19. // Do something else.
  20. }
  21. }
  22. }
警告 ⚠️:常会错误地将诸如 if(var1 == 3 || var1 == 4) 的条件写为 if(var1 == 3 || 4)。由于运算符具有优先级,因此首先执行 == 运算符,接着用 || 运算符处理布尔和数值操作数,就会出现错误。

  这些情况下,就要使用稍有不同的缩进模式,缩短 else 代码块(即在 else 块的后面使用一行代码,而不是一个代码块),这样就得到 else if 语句结构。

  1. if (var1 == 1)
  2. {
  3. // Do something.
  4. }
  5. else if(var1 == 2)
  6. {
  7. // Do something else.
  8. }
  9. else if(var1 == 3 || var1 == 4)
  10. {
  11. // Do something else.
  12. }
  13. else
  14. {
  15. // Do something else.
  16. }

  这些 else if 语句实际上是两个独立语句,它们的功能与上述代码相同,但更便于阅读。像这样进行多个比较的操作,应考虑使用另一种分支结构:switch 语句