если / иначе против троичного оператора - PullRequest
5 голосов
/ 02 ноября 2009

Учитывая время оценки, следующие два эквивалентны?

if(condition1)
{
    //code1
}
else
{
    //code2
}

condition1 ? code1 : code2

Или они просто синтаксически разные?

Ответы [ 4 ]

11 голосов
/ 02 ноября 2009

Разница в том, что последняя станция может использоваться для возврата значения на основе условия.

Например, если у вас есть следующее утверждение:

if (SomeCondition())
{
    text = "Yes";
}
else
{
    text = "No";
}

Используя троичный оператор, вы напишите:

text = SomeCondition() ? "Yes" : "No";

Обратите внимание, как первый пример выполняет оператор на основе условия, а второй возвращает значение на основе условия.

4 голосов
/ 02 ноября 2009

Ну ... В первом случае вместо code1 и code2 может быть любой код или тип (выражение против оператора). В последнем случае они должны быть действительными выражениями.

3 голосов
/ 02 ноября 2009

Да и Да.

Только прибыль заключается в сохранении строк кода.

1 голос
/ 02 ноября 2009

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

...