"If" statement - Порядок проверки объектов?
Простой вопрос о порядке оператора IF в С#.NET
if (Company !=null && Company.ID > 0)
{
}
Работает ли С# слева направо и поэтому делает проверку на Company.ID действительной?
Спасибо.
Ответы
Ответ 1
По существу, да.
Оператор if
ожидает, что логический оператор в круглых скобках определит оценку следующего оператора.
Используя оператор &&
, если первая логическая проверка Company !=null
является ложной, она будет выводить false, а не выполнять другую (Company.ID > 0
).
Также (для справки) использование оператора ||
вернет true после первого оператора, если оно истинно и не оценивает второе.
Ответ 2
MSDN:
Оператор условного-AND (& &) выполняет логическое-AND своих операндов bool, но при необходимости оценивает его второй операнд.
Ответ 3
& & оператор является так называемым оператором короткого замыкания. Он проверяет инструкции слева направо и останавливает тестирование, как только один из тестов выходит из строя. Если вы хотите, чтобы все тесты выполнялись, используйте оператор и.
Более подробную информацию можно найти здесь
Ответ 4
Да, да. Это можно доказать, заменив условия для вызовов функций:
if (myfunc() && myfunc2())
{
console.writeline("Success");
}
...
bool myfunc()
{
console.writeline("func1");
return false;
}
bool myfunc2()
{
console.writeline("func2");
return true;
}
Должен вывести:
func1
Success
Ответ 5
Кроме того, если вы по какой-то причине хотите, чтобы оба выражения были оценены, а не сокращены, используйте один "&" вместо двойного.
http://msdn.microsoft.com/en-us/library/2a723cdk(VS.80).aspx
Ответ 6
Короткий ответ: Да
Маргинально более длинный ответ: эта форма и будет использовать оценку короткого замыкания, поэтому, если компания равна нулю, она не будет выполнять вторую проверку.