IsTrue: TrueCondition: FalseCondition оценивает оба условия - PullRequest
2 голосов
/ 25 июля 2010

Я обнаружил очень странное поведение для следующего кода:

public double ReturnBehavior(List<double> ptList)
{
    return ptList.Count==0? 0:ptList[0];
}

Я думал, что это должно быть эквивалентно

public double ReturnBehavior(List<double> ptList)
{
    if(ptList.Count==0)
       return 0;
    return ptList[0];
}

Но это не так, потому что первый метод будет одновременно оценивать условия true и false. Таким образом, это означает, что первый метод попытается исключить IndexOutOfRange, если ptList.Count==0.

Я что-то здесь упускаю? Или это баг в 2008 году?

Ответы [ 3 ]

1 голос
/ 25 июля 2010

Я проверял как в VS2010, так и в VS2008, поведение ожидается - без исключений.Если у вас есть ошибки - их нет в данном фрагменте кода

0 голосов
/ 25 июля 2010

Я думаю, что в некоторых случаях, если у вас есть многоядерный процессор, компилятор скажет процессору оценить его заранее, если это возможно.По крайней мере, я знаю, что это тот случай, когда, например, у меня есть if(condition1 && condition2), на некоторых компьютерах он будет оценивать оба условия параллельно, и это означает, что он оценивает второе условие, даже если первое не выполняется.

0 голосов
/ 25 июля 2010

Они должны вести себя одинаково. Тернарный оператор использует семантику короткого замыкания. Если тест пройден, оценивается только первое выражение, в противном случае оценивается только второе выражение. Вы действительно видите исключение?

...