C#でnullable bool?
をbool
に変換するにはどうすればよいですか?
x.Value
またはx.HasValue
を試しました...
最終的に、null boolが何を表すかを決定する必要があります。 null
をfalse
にする必要がある場合、これを行うことができます。
bool newBool = x.HasValue ? x.Value : false;
または:
bool newBool = x.HasValue && x.Value;
または:
bool newBool = x ?? false;
null-coalescing operator :x ?? something
を使用できます。ここで、something
は、x
がnull
の場合に使用するブール値です。
例:
bool? myBool = null;
bool newBool = myBool ?? false;
newBool
はfalseになります。
Nullable{T}
GetValueOrDefault()
メソッドを使用できます。 nullの場合、これはfalseを返します。
bool? nullableBool = null;
bool actualBool = nullableBool.GetValueOrDefault();
最も簡単な方法は、null合体演算子を使用することです:??
bool? x = ...;
if (x ?? true) {
}
ヌル可能値を持つ??
は、提供されたヌル可能式を調べることにより機能します。 nullable式に値がある場合、その値が使用されます。それ以外の場合は、??
の右側の式を使用します
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);
bool? a = null;
bool b = Convert.toBoolean(a);
何かのようなもの:
if (bn.HasValue)
{
b = bn.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
}
上記のifは、bool?
がtrueの場合にのみtrueになります。
これを使用して、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
}