到达三元运算符的“另一面”时什么都不做?

注意:我有时会在( a , b , c )之前看到这个问题,但这些问题都不在C#中,也没有帮助。

假设我正在使用? : ? :三元运算符(如果出现false就什么也不做):

 r==5? r=0 :  ; 

我收到了一个错误。 把东西放在那里显然可以解决问题。 如果不做一些随机的空函数,我怎么能保持对方空?

你不能。 条件?:运算符的重点是它计算表达式 。 你甚至不能只使用:

 Foo() ? Bar() : Baz(); 

……因为那不是陈述。 你必须对结果做些什么……就像你访问一个属性一样。

如果您只想在满足特定条件时执行一段代码,则?:运算符不是您想要的 – 您需要if语句:

 if (foo) { bar(); } 

就这么简单。 不要试图将条件运算符扭曲成不应该的东西。

当您显然需要两个参数时,为什么要使用三元组? 您只需使用if语句:

  if(Condition())Action(); 

其他答案是正确的,但他们错过了一个关键点,我认为这是你遇到问题的主要问题。 需要注意的是

r = 0

除了分配r值之外,还返回相同的值。 你可以把它想象成一个function。 你可以调用一个函数,除了返回一个你可能会或可能不会使用的值之外,它可能会做一些其他的事情。

举个例子:

 int square(int n) { // Now you can do other things here too. Maybe you do something with the UI in here: Console.WriteLine("Calculating..."); // ^ Now thing of the above code as assigning a value to a variable. return n * n; // But after assigning the value, it also returns the value... } 

所以,现在假设您可能有两个用例:

 var x = square(2); // -- OR -- square(2); 

请注意,两个语句都输出‘Calculating …’,但前者为x分配值2 * 24

更好的是,假设我们有一个function:

 int AssignValueToVariable(out int variable, int value) { variable = value; return value; } 

现在这个function显然是多余的,但我们假设我们可以用它来更好地理解。 假设它等于assignment =运算符。

也就是说,我们可以回到我们的场景。 三元运算符 ? : ? : 接受两个表达式,以根据指定的条件返回。 所以,当你写:

 r == 5 ? r = 0 : r = 2; // Let's suppose the third operand to be r = 2 

它相当于:

 r == 5 ? AssignValueToVariable(r, 0) : AssignValueToVariable(r, 2) 

这两者基本上都是:

 r == 5 ? 0 : 2 

这带来了操作数必须是表达式的强硬规则,因为整个事物必须归结为表达式。 因此,通过使用其默认值,您可以为表达式获得一种 “无”等价物。

或者,正如其他答案所提到的那样,使用if语句,简单明了:

 if (r == 5) r = 0; 

根据您提供的代码推断,我猜您正在使用已评估的表达式执行某些操作。 您可以将值存储在单独的变量result并对其执行任何操作:

 int result; if (r == 5) result = r = 0; // This sets the value of both result and r to 0 

现在,您可以将result替换为您想要的先前表达式,即r == 5 ? r = 0 : // Pseudo-code r == 5 ? r = 0 : // Pseudo-code

希望能帮助到你 :)

我可以建议像这样的扩展方法:

 public static T ChangeOn(this T variable, bool condition, T newValue) { return condition ? newValue : variable; } 

并像这样使用它:

 var result = r.ChangeOn(r == 5, 0); //or: r = r.ChangeOn(r == 5, 0); for self change