C# – bool を明示的に比較しますか?コンパイル時エラーと実行時例外を回避するために true/false を使用

null 許容ブール (bool?) を通常のブールとまったく同じように使用することはできません。それらは同じものではないからです。通常の bool のように使用しようとすると、コンパイラ エラーと実行時例外が発生します。

幸いなことに、null 許容ブール値を通常のブール値とほとんど同じように扱う簡単で簡潔な方法があります。それらを真/偽で明示的に比較する必要があります。たとえば、null 許容 bool が true かどうかを確認するには、次のようにします。

if (nullableBool == true)
Code language: C# (cs)

これは奇妙に見えるかもしれませんが、他の方法よりも単純で簡潔です。

この記事では、bool? を使用しようとすると発生する可能性のあるさまざまな問題について説明します。通常の boolean のように。

bool を使用しようとすると問題が発生しますか?通常のブール値とまったく同じ

以下は、null 許容ブール値を使用するときに発生する可能性のあるコンパイル時エラーと実行時例外のリストです。

1 – bool を使用していますか?条件ステートメント内の他の変数を含む論理演算子

bool を使おうとするときは? variable を他の変数や論理演算子を含む条件ステートメントで使用すると、次のようなコンパイル エラーが発生します。

このエラーが発生するコードの例:

bool? nullableBool = null;
bool regularBool = true;

if (nullableBool && regularBool)
Code language: C# (cs)

論理 OR を使用しようとすると、同様のコンパイラ エラーが発生します。

2 – bool を使用していますか?条件文でそれ自体

bool を使用しようとすると、別のエラーが発生しますか?条件文自体で。

以下は、そのコンパイラ エラーの原因となるコードを示しています:

bool? nullableBool = null;

if (nullableBool)
Code language: C# (cs)

3 – 条件ステートメントで null 条件 (?.) を使用する場合

呼び出しチェーンで null 条件を使用すると、bool の結果を null 許容の bool の結果であるかのように使用しようとします。そのため、条件ステートメントで結果をチェックしている場合、前述のコンパイラ エラーのいずれかが発生します。

たとえば、null 条件演算子を使用する次のコードを考えてみましょう:

Person person = new Person();

if (person.Pets?.Any())
Code language: C# (cs)

これにより、次のコンパイラ エラーが発生します:

なんで? ? の後のすべて。 nullable になります。 Any() 呼び出しは null 条件の後にあるため、null 許容 bool のように扱います。上記のポイント 2 で、条件ステートメントでこのような null 許容 bool を使用できないことを確認しました。

4 – null bool の .Value を使用していますか?

ブール? null、true、false の 3 つの状態があります。値が明示的に設定されていない場合は、null です。 .Value を使用しようとすると、次の実行時例外が発生します:

次のコードでは、上記の実行時例外が発生します:

bool? nullableBool = null;

if (nullableBool.Value)
Code language: C# (cs)

解決策 – bool を使用しますか? ==真

解決策は簡単です:null 許容 bool を true/false と明示的に比較します。

たとえば、これの代わりに:

bool? nullableBool = null;
bool regularBool = true;

if (nullableBool && regularBool)
Code language: C# (cs)

これを使用:

bool? nullableBool = null;
bool regularBool = true;

if (nullableBool == true && regularBool)
Code language: C# (cs)