null可能ブールを変換しますか?ブールする


121

C#でnullable bool?をどのように変換しますboolか?

私が試したx.Valuex.HasValue...

回答:


199

最終的に、nullブール値が何を表すかを決定する必要があります。もしそうnullならfalse、あなたはこれを行うことができます:

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

または:

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

または:

bool newBool = x ?? false;

あなたがするVB.NET場合はどうdim newBool as Boolean = CBool(x)ですか?ウィルnullに変換するfalseか、例外がスローされますか?
ルークTオブライエン

それでもコンパイルできますか?
ケンペスピサ2017年

はい、あります- Linq「どこで」という文の「クイックアクション」で提案されましたが、なぜlifted operatorsLinq内で機能していないように見えるのか理解できませんでした(おそらくVB.NETだけなのでしょうか)。無効なキャスト例外がスローされる
Luke T O'Brien

いいね!:) ありがとうございました!
プラグアン

または:bool newBool​​ = x == true;
Nick Westgate

104

null結合演算子:を使用できますx ?? something。ここで、somethingは使用するブール値xです。null

例:

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

newBool 偽になります。


1
だから、bool? myBool = null; bool newBool = myBool ?? false;
CaffGeek

85

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

 bool? nullableBool = null;

 bool actualBool = nullableBool.GetValueOrDefault();

6
これは、簡潔さとC#の初心者フレンドリーさの最高のハイブリッドだと思います。また、デフォルト値を指定できるオーバーロードがあることにも注意してください。
Phil

4
「エレガントな」ifステートメントを作成できるため、この方法を使用するのが好きですif (nullableBool.GetValueOrDefault())
Luc Wollants

9

あなたが使用するつもりならbool?if声明、私が一番簡単な方法は、どちらかと比較することで見つけますtruefalse

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);

5

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

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

}

??NULL可能な値とは、提供さNULL可能な式を調べることによって動作します。null許容式に値がある場合は、その値が使用されます。それ以外の場合は、右側の式が使用されます??



2

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

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

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

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


2

この回答は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;

0

これはテーマの興味深いバリエーションです。一見すると、一見すると、真の分岐が行われたと想定します。そうじゃない!

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

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

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

-2

System.Convertは私には問題なく動作します。

using System; ... Bool fixed = Convert.ToBoolean(NullableBool);

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.