方法 : bool? から bool に安全にキャストする (C# プログラミング ガイド)
更新 : 2007 年 11 月
Null 許容 bool? 型は、true、false、null の 3 つの異なる値を格納できます。そのため、bool? 型は、if、for、while などの条件文で使用できません。たとえば、次のコードでは、コンパイラ エラー CS0266 が発生してコンパイルできません。
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.
}