И &&
, и ||
са оператори за "късо съединение", което означава, че ако отговорът е известен от левия операнд, десният операнд не се оценява.
Това означава, че:
a && b
b
няма да бъде оценено, ако a
е невярно, тъй като окончателният отговор вече е известен.
По същия начин:
a || b
b
няма да бъде оценено, ако a
е вярно, тъй като окончателният отговор вече е известен.
Ако искате и двата операнда да бъдат оценени, използвайте вместо това операторите &
и |
.
Бонусът от това е, че можете да пишете изрази, които биха се провалили, ако всички операнди бяха оценени. Ето един типичен if-изявление:
if (a != null && a.SomeProperty != null && a.SomeProperty.Inner != null)
... use a.SomeProperty.Inner
Ако a беше null и изразът ще продължи да оценява a.SomeProperty
, той ще хвърли NullReferenceException
, но тъй като &&
късо съединение, ако a
е null
, изразът няма да оцени останалото и по този начин няма да хвърли изключението.
Очевидно, ако замените &&
с &
, то ще хвърли това изключение, ако a
или a.SomeProperty
е null
.
person
Lasse V. Karlsen
schedule
19.12.2013