Это нормально, как есть. Второе условие не будет проверено , если HasValue
ложно, поэтому оно не вызовет исключение. Это похоже на такую вещь:
string name = ...;
if (name != null && name.Length > 5)
Опять же, это нормально - вы не получите исключение NullReferenceException, если name
равно нулю, поскольку && закорачивает .
Аналогично || оператор имеет короткое замыкание, но в обратном направлении - там, если левый операнд равен true , общее выражение оценивается как истинное без проверки правого операнда. Например:
// Treat null as if it were an empty string
if (name == null || name.Length == 0)
РЕДАКТИРОВАТЬ: Как отмечено в комментариях, это относится только к && и || - это не относится к & и |, которые всегда оценивают оба операнда.