web-dev-qa-db-ja.com

nullable boolを変換しますか?ブールする

C#でnullable bool?boolに変換するにはどうすればよいですか?

x.Valueまたはx.HasValueを試しました...

106
KentZhou

最終的に、null boolが何を表すかを決定する必要があります。 nullfalseにする必要がある場合、これを行うことができます。

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

または:

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

または:

bool newBool = x ?? false;
161
Ken Pespisa

null-coalescing operatorx ?? somethingを使用できます。ここで、somethingは、xnullの場合に使用するブール値です。

例:

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

newBoolはfalseになります。

99
SLaks

Nullable{T}GetValueOrDefault()メソッドを使用できます。 nullの場合、これはfalseを返します。

 bool? nullableBool = null;

 bool actualBool = nullableBool.GetValueOrDefault();
80
Joel Briggs

最も簡単な方法は、null合体演算子を使用することです:??

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

}

ヌル可能値を持つ??は、提供されたヌル可能式を調べることにより機能します。 nullable式に値がある場合、その値が使用されます。それ以外の場合は、??の右側の式を使用します

5
JaredPar

ifステートメントでbool?を使用する場合、最も簡単なことは、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.

アプリケーションの他の部分に渡すためにそれをブールに変換する場合は、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);
4
David Yaw
bool? a = null;
bool b = Convert.toBoolean(a); 
3
astronought

何かのようなもの:

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

完全な方法は次のとおりです。

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

または、次を使用して特定の値をテストできます

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

この回答は、条件でbool?を単にテストする場合のユースケースです。通常のboolを取得するためにも使用できます。これは、coalescing operator ??よりも読みやすいと私が思う代替手段です。

条件をテストする場合は、これを使用できます

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

上記のifは、bool?がtrueの場合にのみtrueになります。

これを使用して、bool?から通常のboolを割り当てることもできます。

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

魔女はと同じです

bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;
2
Rémi

これはテーマの興味深いバリエーションです。一目見ただけで、あなたは本当の分岐がとられたと思うでしょう。そうではありません!

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

あなたが望むものを得る方法はこれをすることです:

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