这个逻辑陈述尽可能短

时间:2012-07-25 07:38:17

标签: c#

下面的类中的逻辑if-else语句与c#允许的一样短,或者这个语句可以更短吗?

逻辑结构?: here on MSDN在某些情况下是一个捷径而不是以下情况?

class Stats
{
    public int Total = 0;
    public int Missed = 0;
    public int Correct = 0;
    public int Accuracy = 0;

    void Update(Boolean correctKey)
    {
        //correctKey ? Correct++ : Missed++; //incorrect syntax for this situation as the ? operator is used to set a value
        if (correctKey==true) Correct++;  else  Missed++; //shortest c# syntax?
    }
}

6 个答案:

答案 0 :(得分:5)

条件运算符旨在与赋值一起使用,而不是if / else语句的通用替换。这是因为它产生结果(它是一个表达式),然后将结果分配给其他东西。

例如,请考虑以下声明:

var a = x != null ? x : y;

这将变量a的值设置为对象x(如果它不为空,或者如果是,对象y)。这里的目标是可读性。一些程序员发现使用极其常见且简单的逻辑来读取语句更容易,就像在一行中一样,而不是分散到if / else块中。

(这种模式在C#中基本上是不合时宜的,因为我们有空合并运算符,但它可以作为一个很好的教学案例。)

相反,您在此处尝试表达的内容并不适用于条件运算符,因为它没有结果而且没有执行赋值。

在这种情况下,我会说if / else块是您的最佳选择。请注意,较短的代码不一定会生成更快的代码。实际上,在更多情况下,编译器或JITer将生成具有相同性能的等效代码。不要(ab)使用条件运算符来尝试使代码更快,只有在它使代码更清晰可读时才使用它。如果可读性或表现力需要将某些内容分解成多行,那么完全相反就没有错。

正如其他示例所示,您实际上可以将if / else块混合成一行:

if (correctKey) Correct++; else Missed++;

但是这也不能使代码运行得更快,它只是将它们拼凑起来。就像连续的句子一样,这应该明智地用于意义明确无误的地方。

答案 1 :(得分:3)

三元运算符不能在update语句中工作,因为它只构成一个表达式,需要赋值。

答案 2 :(得分:2)

试试这个

if (correctKey) Correct++;  else  Missed++;

您只能在实际发出结果的语句中使用条件运算符,例如

var result = correctKey ? Correct++ : Missed++;
在递增之前,

result将是CorrectMissed的先前值。

答案 3 :(得分:2)

根据您的要求,可以将三元运算符用作任何一种情况。

假设值为

correctKey = false;
Correct = 1;
Missed = 2;

tempVar = correctKey ? Correct++ : Missed++;  // Result: 2

OR

tempVar = correctKey ? ++Correct : ++Missed;  // Result: 3 

编辑:

对于这两种情况,值都在递增。因此,这个陈述也可以写成如下: -

tempVar = (correctKey ? Correct : Missed)+1;  // Result: 3

答案 4 :(得分:1)

var temp = correctKey == true ? Correct++ : Missed++;

答案 5 :(得分:1)

if(...)检查括号中的语句是否为“true”。 可以写

 if(correctKey)
    Correct++;
 else
    Missed++;

对于像你这样的简短陈述:

correctKey == true ? Correct++ : Missed++;