三元运算符的用法

本文关键字:运算符 用法 三元 | 更新日期: 2023-09-27 18:02:14

这段看似简单的代码有什么问题?

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

VS抱怨
只有赋值、调用、自增、自减和new对象表达式可以用作语句

三元运算符的用法

试试这个:

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

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

可以写成:invoice.GST = Math.Max(0, invoice.GST - gstValue);

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

三元操作符类似于-+%等操作符。

前面提到的表达式作为语句使用是有意义的,因为它们会产生副作用。

一般来说,将没有副作用的操作作为语句是没有意义的,因为删除操作符和仅仅计算操作数会产生相同的效果,这通常表明该行为不是程序员想要的。

的例外是有条件地计算其操作数的三个操作符(另外两个是&&||)——消除了操作符和操作数变化的副作用。在C和c++中,您有时会发现这些操作符仅用于条件求值,但c#不允许这样做。在这三种情况下,可以使用if语句获得条件求值,这也使代码更具可读性。

试试这个:

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