三元运算符使用

时间:2011-07-15 02:27:06

标签: c# .net ternary-operator

这个看似简单的代码怎么了?

invoice.GST > gstValue ? invoice.GST -= gstValue : invoice.GST = 0;
VS抱怨道 只能将赋值,调用,递增,递减和新对象表达式用作语句

5 个答案:

答案 0 :(得分:6)

试试这个:

invoice.GST = ((invoice.GST>gstValue)?(invoice.GST - gstValue):0);

答案 1 :(得分:3)

因为你不能使用invoice.GST > gstValue ? invoice.GST -= gstValue : invoice.GST = 0;作为陈述(就像VS告诉你的那样)。同样你不能这样做:int i = 0; i;

您可以将其写为:invoice.GST = Math.Max(0, invoice.GST - gstValue);

答案 2 :(得分:1)

invoice.GST = invoice.GST > gstValue ? invoice.GST - gstValue : 0;

三元运算符类似于 - + 和其他运算符。

答案 3 :(得分:0)

使用上述表达式作为语句是有意义的,因为它们会引起副作用。

通常,将没有副作用的操作作为语句是没有意义的,因为删除运算符只是评估操作数会产生相同的效果,这些通常表明行为不是程序员想要的。

对此的例外是有条件地评估其操作数的三个运算符(另外两个是&&||) - 消除运算符和操作数更改的副作用。在C和C ++中,您有时会发现这些运算符仅用于引起条件评估,但C#不允许这样做。在所有这三种情况下,可以使用if语句获得条件评估,这也使代码更具可读性。

答案 4 :(得分:0)

试试这个:

invoice.GST -= invoice.GST > gstValue ? gstValue : invoice.GST;