Существует ли встроенная функция для трехслойного оператора if (меньше нуля, больше нуля, нуля)? - PullRequest
0 голосов
/ 03 декабря 2018

Я хотел бы спросить, есть ли встроенный оператор C #, который позволил бы мне написать следующее с меньшим количеством строк кода:

float fH = Input.GetAxis("Horizontal"); //doesn't really matter where this comes from, but in this case, it's the user's input on a joystick

if (fH < 0)
{
    fH = -1;
}
else if (fH > 0)
{
    fH = 1;
}
else
{
    //don't change anything
}

Насколько я знаю, я не могу использовать

fH = if(...)

, поскольку это позволило бы только 2 случая, а мне нужно 3 случая (меньше 0, больше 0 или 0).

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Math.Sign вернет, является ли вход положительным, отрицательным или 0 только с одним оператором (вообще не нужно if).

Math.Sign(-2) 
-1
Math.Sign(-3.3)
-1
Math.Sign(3)
1
Math.Sign(0)
0

Возвращает int32, который вы можете переназначить обратно на float, как вы это делали.

fH = Math.Sign(fH);

0 голосов
/ 03 декабря 2018

Я не уверен, что мой ответ - то, что вам нужно, но вы можете упростить свой код до однострочного кода.

if (fH < 0)
{
    fH = -1;
}
else if (fH > 0)
{
    fH = 1;
}
else
{
    //don't change anything
}

Превратить приведенный выше код в один строчный код ниже.

fH = (fH < 0) ? -1 : ((fH > 0) ? 1 : 0);

Часть else в вашем коде упоминает, что значение fH не изменяется.Это только выполнимо, если fH значение равно 0. Итак, я ставлю нулевое значение в конце моего однострочного кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...