回答:
最終的に、nullブール値が何を表すかを決定する必要があります。もしそうnull
ならfalse
、あなたはこれを行うことができます:
bool newBool = x.HasValue ? x.Value : false;
または:
bool newBool = x.HasValue && x.Value;
または:
bool newBool = x ?? false;
Linq
「どこで」という文の「クイックアクション」で提案されましたが、なぜlifted operators
Linq内で機能していないように見えるのか理解できませんでした(おそらくVB.NETだけなのでしょうか)。無効なキャスト例外がスローされる
Nullable{T}
GetValueOrDefault()
メソッドを使用できます。nullの場合はfalseを返します。
bool? nullableBool = null;
bool actualBool = nullableBool.GetValueOrDefault();
if (nullableBool.GetValueOrDefault())
あなたが使用するつもりなら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.
それをブール値に変換してアプリケーションの他の部分に渡す場合は、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?
、ある状態でをテストしたい場合の使用例です。通常の取得にも使用できbool
ます。これは、私が個人的に読むよりも読みやすい代替手段coalescing operator ??
です。
条件をテストする場合は、これを使用できます
bool? nullableBool = someFunction();
if(nullableBool == true)
{
//Do stuff
}
上記の場合、trueの場合にのみbool?
trueになります。
これを使用bool
して、bool?
bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;
魔女は同じです
bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;
VB.NET
場合はどうdim newBool as Boolean = CBool(x)
ですか?ウィルnull
に変換するfalse
か、例外がスローされますか?