这个看似简单的代码怎么了?
invoice.GST > gstValue ? invoice.GST -= gstValue : invoice.GST = 0;
VS抱怨道
只能将赋值,调用,递增,递减和新对象表达式用作语句
答案 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;