Если вы собираетесь использовать bool?
в выражении if
, я считаю, что проще всего сравнить с true
или false
.
bool? b = ...;
if (b == true) { Debug.WriteLine("true"; }
if (b == false) { Debug.WriteLine("false"; }
if (b != true) { Debug.WriteLine("false or null"; }
if (b != false) { Debug.WriteLine("true or null"; }
Конечно, вы также можете сравнивать с нулем.
bool? b = ...;
if (b == null) { Debug.WriteLine("null"; }
if (b != null) { Debug.WriteLine("true or false"; }
if (b.HasValue) { Debug.WriteLine("true or false"; }
//HasValue and != null will ALWAYS return the same value, so use whatever you like.
Если вы собираетесь преобразовать его в логическое значение для передачи другим частям приложения, то вам нужен оператор Null Coalesce.want.
bool? b = ...;
bool b2 = b ?? true; // null becomes true
b2 = b ?? false; // null becomes false
Если вы уже проверили на нулевое значение, и вам просто нужно значение, тогда получите доступ к свойству Value.
bool? b = ...;
if(b == null)
throw new ArgumentNullException();
else
SomeFunc(b.Value);