Простой вопрос о порядке оператора IF в C# .NETОперация «Если» - Порядок проверки объектов?
if (Company !=null && Company.ID > 0)
{
}
ли C# работа слева направо, и, следовательно, сделать чек на Company.ID действителен?
Спасибо.
Простой вопрос о порядке оператора IF в C# .NETОперация «Если» - Порядок проверки объектов?
if (Company !=null && Company.ID > 0)
{
}
ли C# работа слева направо, и, следовательно, сделать чек на Company.ID действителен?
Спасибо.
По существу, да.
Оператор if
ожидает, что в круглых скобках оператор boolean определит оценку следующего оператора.
Использование оператора &&
, если первая логическая проверка Company !=null
является ложной, инструкция будет возвращать false, а не выполнять другую (Company.ID > 0
).
Также (для справки) оператор ||
вернет true после первого оператора, если он является истинным и не оценивает второй.
Короткий ответ: Да
Незначительно больше ответ: что форма и будет использовать оценку короткого замыкания, так что если компания является нулевым, тогда он не будет выполнять вторую проверку.
MSDN:
Условные-оператор И (& &) выполняет логические и его операнды BOOL, но только оценивает свой второй операнд, если это необходимо.
Кроме того, если вы по какой-то причине хочет, чтобы оба выражения должны быть оценены, а не shortcutted, используйте один «&» вместо двойного.
http://msdn.microsoft.com/en-us/library/2a723cdk(VS.80).aspx
& & оператор является так называемый оператором короткого замыкания. Он проверяет инструкции слева направо и останавливает тестирование, как только один из тестов выходит из строя. Если вы хотите, чтобы все тесты выполнялись, используйте оператор &.
Более подробную информацию можно найти here
Да, это делает. Вы можете доказать, подставив условия для вызова функции:
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.aspx – cofiem
Это будет короткое замыкание из-за '&&', не имеет ничего общего с 'if'. Я полагаю, что я бы прокомментировал это, чтобы быть полным, иначе +1. – Marc
@Marc - обновлено с более точным объяснением, спасибо. – cjk