Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 三值运算符用法_C#_.net_Ternary Operator - Fatal编程技术网

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:之所以有效,是因为
-=
运算符返回所分配的值。您可以将
-=
更改为
-
,这样会产生相同的效果(而且启动时看起来不那么奇怪)。