Другие ответы верны, но они упускают ключевой момент, который, я думаю, является главным, с чем у вас возникла проблема. Следует заметить, что
r = 0
помимо присвоения r
значения, также возвращает то же значение. Вы можете думать об этом как о функции. Вы можете вызвать функцию, которая, возможно, делает что-то еще, помимо возврата значения, которое вы можете использовать или не использовать.
Возьмем, к примеру:
int square(int n)
{
// Now you can do other things here too. Maybe you do something with the UI in here:
Console.WriteLine("Calculating...");
// ^ Now thing of the above code as assigning a value to a variable.
return n * n;
// But after assigning the value, it also returns the value...
}
Итак, теперь предположим, что у вас может быть два варианта использования:
var x = square(2);
// -- OR --
square(2);
Обратите внимание, что оба оператора выводят 'Расчет...', но первый присваивает x
значение 2 * 2
или 4
.
Еще лучше, скажем, у нас есть функция:
int AssignValueToVariable(out int variable, int value)
{
variable = value;
return value;
}
Теперь функция явно избыточна, но давайте предположим, что мы можем использовать ее для лучшего понимания. Предположим, что это эквивалентно оператору присваивания =
.
Тем не менее, мы можем вернуться к нашему сценарию. Тернарный оператор <condition> ? <true expression> : <false expression>
принимает два выражения для возврата на основе указанного условия. Итак, когда вы пишете:
r == 5 ? r = 0 : r = 2; // Let's suppose the third operand to be r = 2
это эквивалентно:
r == 5 ? AssignValueToVariable(r, 0) : AssignValueToVariable(r, 2)
оба из которых по существу:
r == 5 ? 0 : 2
Это возвращает жесткое и быстрое правило, согласно которому операнды должны быть выражениями, поскольку все должно сводиться к выражению. Таким образом, вы можете получить своего рода эквивалент выражения "ничего", используя его значение по умолчанию.
Или, как упоминается в других ответах, используйте оператор if
, прямо и просто:
if (r == 5)
r = 0;
Экстраполируя предоставленный вами код, я предполагаю, что вы что-то делаете с оцененным выражением. Вы можете сохранить значение в отдельной переменной result
и делать с ней что угодно:
int result;
if (r == 5)
result = r = 0; // This sets the value of both result and r to 0
Теперь вы можете заменить result
на ваше предыдущее выражение, которое вы хотели, то есть r == 5 ? r = 0 : <nothing> // Pseudo-code
.
Надеюсь, поможет :)
person
Fᴀʀʜᴀɴ Aɴᴀᴍ
schedule
15.12.2016
r==5? r=0 : <nothing> ;
- person devRicher   schedule 14.12.2016r = (r == 5 ? 0 : r)
, но вы должны просто использовать операторif
, т.е.if (r == 5) { r = 0; }
- person Lee   schedule 14.12.2016