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