Подтвердить что ты не робот

Преобразовать nullable bool? обмануть

Как вы преобразовываете значение с нулевым значением bool? в bool в С#?

Я пробовал x.Value или x.HasValue...

4b9b3361

Ответ 1

В конечном итоге вам нужно решить, что будет представлять нулевой bool. Если null должно быть false, вы можете сделать это:

bool newBool = x.HasValue ? x.Value : false;

Или:

bool newBool = x.HasValue && x.Value;

Или:

bool newBool = x ?? false;

Ответ 2

Вы можете использовать оператор null-coalescing: x ?? something, где something - это логическое значение, которое вы хотите использовать, если x - null.

Пример:

bool? myBool = null;
bool newBool = myBool ?? false;

newBool будет ложным.

Ответ 3

Вы можете использовать метод Nullable{T} GetValueOrDefault(). Это вернет false, если null.

 bool? nullableBool = null;

 bool actualBool = nullableBool.GetValueOrDefault();

Ответ 4

Самый простой способ - использовать нулевой коалесцирующий оператор: ??

bool? x = ...;
if (x ?? true) { 

}

?? с нулевыми значениями работает, исследуя предоставленное выражение с возможностью NULL. Если значение с нулевым значением имеет значение, его значение будет использоваться иначе, оно будет использовать выражение справа от ??

Ответ 5

Если вы собираетесь использовать 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.

Если вы собираетесь конвертировать его в 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);

Ответ 6

Что-то вроде:

if (bn.HasValue)
{
  b = bn.Value
}

Ответ 7

Полный способ:

bool b1;
bool? b2 = ???;
if (b2.HasValue)
   b1 = b2.Value;

Или вы можете проверить определенные значения, используя

bool b3 = (b2 == true); // b2 is true, not false or null

Ответ 8

bool? a = null;
bool b = Convert.toBoolean(a); 

Ответ 9

Это интересная вариация на тему. При первом и втором взглядах вы предполагаете, что берется истинная ветвь. Не так!

bool? flag = null;
if (!flag ?? true)
{
    // false branch
}
else
{
    // true branch
}

Чтобы получить то, что вы хотите, выполните следующие действия:

if (!(flag ?? true))
{
    // false branch
}
else
{
    // true branch
}

Ответ 10

Этот ответ предназначен для использования, когда вы просто хотите проверить bool? в состоянии. Его также можно использовать для получения нормального bool. Это альтернативный вариант я personnaly легче читать, чем coalescing operator ??.

Если вы хотите протестировать условие, вы можете использовать этот

bool? nullableBool = someFunction();
if(nullableBool == true)
{
    //Do stuff
}

Вышеприведенное if будет истинным, только если значение bool? истинно.

Вы также можете использовать это для назначения регулярного bool из bool?

bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;

witch совпадает с

bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;