【问题标题】:when is the appropriate time to use [? and :] instead of if statement?什么时候使用 [?和 :] 而不是 if 语句?
【发布时间】:2020-03-24 22:44:31
【问题描述】:

好的,所以我看到了 [?和 :] 用于替代大量代码中的某些 if 语句

例如

driftDirec = Input.GetAxis("Horizontal")>0 ? 1: -1;

为什么不喜欢

if (driftDirec > 0)
{ do stuff}
else
{do stuff}

或者什么,你能告诉我什么时候使用这些是合适的时间,我不知道那叫什么?

【问题讨论】:

标签: c# if-statement


【解决方案1】:

“[? 和 :]”,正如您所说的,被称为“三元运算符”。它用作

的简写
if (condition)
  variable = value1;
else
  variable = value2;

// as ternary operator:
variable = (condition)? value1 : value2;

没有必要使用,但它可以更短,因此更具可读性。因此,您可以随时使用它(也许与您的团队交谈,因为有些人不喜欢阅读它),但我强烈建议不要嵌套它们或将它们与长表达式一起使用,如下所示:

// please do not do this
very_long_variable_name = (this_condition_is_also_very_long)? a_complicated_expression-another_complicated_expression : yet_another_even_more_complicated_expression;

// or this
variable = (condition1)? (condition2)? value1 : value2 : (condition2)? value3 : value2:

我认为应该清楚为什么这是一个坏主意。

TLDR: 当它使你的作业更具可读性时使用它。

【讨论】:

    【解决方案2】:

    称为三元条件运算符。看看这里MSDN

    我认为没有一般规则之类的。所以你必须选择何时使用哪个合成器。

    我自己只是看看哪个更容易让其他人阅读我的源代码。

    对于简单的赋值,我经常使用三元条件运算符:

    var moneyToPay = (person.Age > 12) ? 15 : 8;
    

    如果结果只是一个布尔值,则不需要运算符,因为条件本身就是一个布尔值。

    bool isOldPerson = (person.Age > 45);
    

    如果我只想根据条件调用一个函数,有时我会这样做:

    var moneyToPay = (person.Age > 45)
                     ? GetSomeValue()
                     : GetSomeOtherValue();
    

    但这很快就会变得非常混乱。如果你想根据条件做一些额外的工作,你应该使用像这样的普通 if 语句:

    if (person.Age > 45) 
    {
        //Do stuff...
    }
    else 
    {
        //Do stuff...
    }
    

    试着从另一个开发者的角度来看待你的代码。使用三元条件运算符真的更容易阅读吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-08
      • 2011-08-30
      • 2017-09-27
      • 2018-08-04
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多