Конвертировать nullable bool? в бул
как вы преобразуете nullable bool?
до bool
в C#?
Я пробовал x.Value
или x.HasValue
...
10 ответов:
вы в конечном счете должны решить, что будет представлять нулевой bool. Если
null
должно бытьfalse
, вы можете сделать это:bool newBool = x.HasValue ? x.Value : false;
или:
bool newBool = x.HasValue && x.Value;
или:
bool newBool = x ?? false;
можно использовать нуль-коалесцирующий оператор:
x ?? something
, гдеsomething
- это логическое значение, которое вы хотите использовать, еслиx
- этоnull
.пример:
bool? myBool = null; bool newBool = myBool ?? false;
newBool
будет ложным.
можно использовать
Nullable{T}
GetValueOrDefault()
метод. Это вернет false, если null.bool? nullableBool = null; bool actualBool = nullableBool.GetValueOrDefault();
самый простой способ-использовать оператор слияния null:
??
bool? x = ...; if (x ?? true) { }
The
??
со значениями null работ по изучению представленных выражение nullable. Если nullable выражение имеет значение, то это значение будет использоваться иначе он будет использовать выражение справа от??
если вы собираетесь использовать
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"; }
конечно, вы также можете сравнить с 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.
если вы собираетесь преобразовать его в bool для передачи другим частям приложения, то оператор null Coalesce-это то, что вы хотите.
bool? b = ...; bool b2 = b ?? true; // null becomes true b2 = b ?? false; // null becomes false
если вы уже проверили значение null, и вам просто нужно значение, то доступ к свойству value.
bool? b = ...; if(b == null) throw new ArgumentNullException(); else SomeFunc(b.Value);
полный путь будет такой:
bool b1; bool? b2 = ???; if (b2.HasValue) b1 = b2.Value;
или вы можете проверить для конкретных значений, используя
bool b3 = (b2 == true); // b2 is true, not false or null
это ответ для случая использования, когда вы просто хотите испытать
bool?
в состояние. Он также может быть использован, чтобы получить нормальныйbool
. Это альтернатива, которую я лично нахожу легче читать, чемcoalescing operator ??
.если вы хотите проверить условие, вы можете использовать это
bool? nullableBool = someFunction(); if(nullableBool == true) { //Do stuff }
выше если будет true, только если
bool?
- Это правда.вы также можете использовать это, чтобы назначить обычный
bool
Сbool?
bool? nullableBool = someFunction(); bool regularBool = nullableBool == true;
ведьма то же, что и
bool? nullableBool = someFunction(); bool regularBool = nullableBool ?? false;
Это интересная вариация на тему. При первом и втором взгляде вы бы предположили, что истинная ветвь взята. Не так!
bool? flag = null; if (!flag ?? true) { // false branch } else { // true branch }
способ получить то, что вы хотите сделать это:
if (!(flag ?? true)) { // false branch } else { // true branch }