下面的类中的逻辑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?
}
}
答案 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
将是Correct
或Missed
的先前值。
答案 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++;