C# 三值运算符用法
这个看似简单的代码有什么问题C# 三值运算符用法,c#,.net,ternary-operator,C#,.net,Ternary Operator,这个看似简单的代码有什么问题 invoice.GST > gstValue ? invoice.GST -= gstValue : invoice.GST = 0; VS投诉 只有赋值、调用、递增、递减和新对象表达式可以用作语句 invoice.GST = ((invoice.GST>gstValue)?(invoice.GST - gstValue):0); invoice.GST -= invoice.GST > gstValue ? gstValue : invoic
invoice.GST > gstValue ? invoice.GST -= gstValue : invoice.GST = 0;
VS投诉只有赋值、调用、递增、递减和新对象表达式可以用作语句
invoice.GST = ((invoice.GST>gstValue)?(invoice.GST - gstValue):0);
invoice.GST -= invoice.GST > gstValue ? gstValue : invoice.GST;
因为您不能使用
invoice.GST>gstValue?invoice.GST-=gstValue:invoice.GST=0代码>作为声明(如VS告诉您的)。就像你不能这样做一样:inti=0;一,代码>
您可以将其编写为:invoice.GST=Math.Max(0,invoice.GST-gstValue)代码>
三元运算符类似于-、+、%和其他运算符 上面提到的表达式可以作为语句使用,因为它们会产生副作用
一般来说,将一个没有副作用的操作作为一个语句是没有意义的,因为删除操作符并仅仅计算操作数会产生相同的效果,这通常表明该行为不是程序员想要的
例外情况是有条件地计算其操作数的三个运算符(另外两个是&&
和|
)——消除了运算符和操作数更改的副作用。在C和C++中,有时会发现这些运算符仅用于导致条件评估,但C不允许这样做。在这三种情况下,都可以使用if
语句获得条件求值,这也使代码更具可读性。尝试以下方法:
invoice.GST = ((invoice.GST>gstValue)?(invoice.GST - gstValue):0);
invoice.GST -= invoice.GST > gstValue ? gstValue : invoice.GST;
三元运算符只是一个运算符,而不是一个语句(比如if)。是的。我知道它是一个操作员,我在问题中写了它,但我仍然把它当作一个陈述!上帝保佑我…这起作用了invoice.GST=(invoice.GST>gstValue)?(invoice.GST-=gstValue):0代码>谢谢你@Reddy:之所以有效,是因为-=
运算符返回所分配的值。您可以将-=
更改为-
,这样会产生相同的效果(而且启动时看起来不那么奇怪)。