С# вам нужно проверить, имеет ли что-то значение, и если что-то больше 0?
Работа над проектом и кодер делает это много в его проверках. Сначала он проверяет, имеет ли значение nullable значение int, а затем он проверяет, превышает ли его значение 0. Почему? Зачем делать две проверки, если одна проверка - если она больше 0 - должна быть достаточной? Потому что nulls не больше 0, поэтому... Это избыточно?
Не уверен, было ли это что-то, о чем я просил бы здесь, но я не знаю, как это сделать в поисковой системе Google, поэтому, возможно, я не знаю, что делает этот программист.
Ответы
Ответ 1
Код, вероятно, избыточен.
Если я int?
, то:
if (i.HasValue && i.Value > 0)
эквивалентно:
if (i > 0)
От MSDN:
Когда вы выполняете сравнения с типами NULL, если значение одного из нулевых типов является нулевым, а другое - нет, все сравнения оцениваются как false, за исключением: = (не равно). Важно не предполагать, что, поскольку конкретное сравнение возвращает false, противоположный случай возвращает true. В следующем примере 10 не больше, меньше или равно нулю. Только num1!= Num2 имеет значение true.
Ответ 2
Возможно, что значение переменной имеет разные значения в этом контексте.
int? someNumber = null; //might mean "there is no value"
int? someOtherNumber = 0; //might mean "the user has selected: 0"
Ответ 3
Следующее:
class Program {
static void Main(string[] args) {
int? i = null;
if (i > 0) { Console.WriteLine(">0");
} else { Console.WriteLine("not >0");
}
if (i < 0) { Console.WriteLine("<0");
} else { Console.WriteLine("not <0");
}
if (i == 0) {Console.WriteLine("==0");
} else { Console.WriteLine("not ==0");
}
Console.ReadKey();
}
}
выводит
not >0
not <0
not ==0
без исключения. Таким образом, проверка null/HasValue в этом случае является избыточной. Есть одна небольшая разница. Следующее:
(i.HasValue && (i.Value == 0))
примерно в два раза быстрее, чем
(i == 0)
когда я является нулевым, хотя оба они настолько быстра, что это не важная разница. Когда я имеет значение, два сравнения занимают примерно такое же количество времени.
Ответ 4
Проверка нулей обычно выполняется для предотвращения исключений или для установки значений по умолчанию (до .NET 4). Проверка нуля была бы скорее выбором бизнес-логики, в зависимости от обстоятельств.
Ответ 5
Вы можете обнаружить, что программист используется для следующего типа проверки ссылочных типов до их разыменования. Учитывая, что Nullable HasValue
похож по понятию на нулевую проверку, я думаю, что шаблон "застрял", хотя он избыточен с типами с возможностью NULL.
if ((myObject != null) && (myObject.SomeValue > 0))
...