Нужна помощь с пониманием данного примера C#

Рейтинг: 0Ответов: 2Опубликовано: 15.02.2023

Увидел в видео такую часть кода

var randomTile = Random.Range(0,6) == 3 ? mountineTile : grassTile;

Можете объяснить данную конструкцию? Random.Range понимаю, а вот эту часть уже нет " = 3 ? mountineTile : grassTile;"

Для чего вопросительный знак, двоеточие. Заранее спасибо вам

Ответы

▲ 4Принят

В основном применяют для сокращения/упрощения кода. Данное выражение эквивалентно:

var randomTile;
if (Random.Range(0,6) == 3) // может всё таки равно, а не присвоение?
{
  randomTile = mountineTile;
}
else
{
  randomTile = grassTile;
}
▲ 4

Условный оператор ?:, также называемый тернарным, вычисляет логическое выражение и в зависимости от полученного значения true или false возвращает результат одного из двух соответствующих выражений, как показано в следующем примере.

string GetWeatherDisplay(double tempInCelsius) => tempInCelsius < 20.0 ? "Cold." : "Perfect!";

Console.WriteLine(GetWeatherDisplay(15));  // output: Cold.
Console.WriteLine(GetWeatherDisplay(27));  // output: Perfect!

Как показано в предыдущем примере, синтаксис условного оператора выглядит следующим образом.

condition ? consequent : alternative

Выражение condition должно принимать значение true или false. Если condition принимает значение true, вычисляется выражение consequent, а результат становится результатом операции. Если condition принимает значение false, вычисляется выражение alternative, а результат становится результатом операции. Вычисляется только выражение consequent или alternative.

Условный оператор имеет правую ассоциативность, то есть выражение формы.

a ? b : c ? d : e

вычисляется как

a ? b : (c ? d : e)

Вы можете использовать следующий мнемонический прием, чтобы запомнить, как оценивается условный оператор:

is this condition true ? yes : no

Документация