Использование троичного оператора - PullRequest
2 голосов
/ 15 июля 2011

Что не так с этим, казалось бы, простым кодом?

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

VS жалуется
Только операторы присваивания, вызова, приращения, уменьшения и нового выражения объекта могут использоваться как оператор

Ответы [ 5 ]

6 голосов
/ 15 июля 2011

Попробуйте это:

invoice.GST = ((invoice.GST>gstValue)?(invoice.GST - gstValue):0);
3 голосов
/ 15 июля 2011

Потому что вы не можете использовать invoice.GST > gstValue ? invoice.GST -= gstValue : invoice.GST = 0; как утверждение (как вам сказал В.С.). То же самое, что вы не можете сделать это: int i = 0; i;

Вы могли бы написать это как: invoice.GST = Math.Max(0, invoice.GST - gstValue);

1 голос
/ 15 июля 2011
invoice.GST = invoice.GST > gstValue ? invoice.GST - gstValue : 0;

Троичный оператор подобен - , + , % и другим операторам.

0 голосов
/ 15 июля 2011

Попробуйте это:

invoice.GST -= invoice.GST > gstValue ? gstValue : invoice.GST; 
0 голосов
/ 15 июля 2011

Упомянутые выражения имеет смысл использовать в качестве операторов, поскольку они вызывают побочные эффекты.

Как правило, не имеет смысла иметь операцию без побочных эффектов в качестве оператора, потому что удаление оператора и просто оценка операндов будет иметь тот же эффект, это обычно указывает на то, что поведение не соответствует намерению программиста.

Исключением являются три оператора, которые условно оценивают свои операнды (два других && и ||) - исключают оператор и побочный эффект изменения операнда. В C и C ++ вы иногда обнаружите, что эти операторы используются исключительно для условной оценки, но C # этого не позволяет. Во всех трех случаях условную оценку можно получить с помощью оператора if, что также делает код более читабельным.

...