方法: bool? から bool に安全にキャストする (C# プログラミング ガイド)
Null 許容 bool? 型は、true、false、null の 3 つの異なる値を格納できます。 そのため、bool? 型は、if、for、while などの条件文で使用できません。 たとえば、次のコードはコンパイラ エラーになります。
bool? b = null;
if (b) // Error CS0266.
{
}
コンパイルできないのは、条件文のコンテキストで null の意味があいまいだからです。 条件付きステートメントで bool? を使用するにはまず、その HasValue プロパティをチェックしてその値が null でないことを確認します。次に、bool にキャストします。 詳細については、「bool」を参照してください。 bool? でキャストを実行するときに値が null になっていると、条件テストで InvalidOperationException がスローされます。 次の例は、bool? から bool に安全にキャストするための 1 つの方法を示しています。
使用例
bool? test = null;
// Other code that may or may not
// give a value to test.
if(!test.HasValue) //check for a value
{
// Assume that IsInitialized
// returns either true or false.
test = IsInitialized();
}
if((bool)test) //now this cast is safe
{
// Do something.
}