Подтвердить что ты не робот

"If" statement - Порядок проверки объектов?

Простой вопрос о порядке оператора IF в С#.NET

if (Company !=null && Company.ID > 0)
{
}

Работает ли С# слева направо и поэтому делает проверку на Company.ID действительной?

Спасибо.

4b9b3361

Ответ 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

Короткий ответ: Да

Маргинально более длинный ответ: эта форма и будет использовать оценку короткого замыкания, поэтому, если компания равна нулю, она не будет выполнять вторую проверку.