Практическое руководство. Безопасное приведение bool? к bool (Руководство по программированию на C#)
Допускающий значение NULL тип bool? может содержать три различных значения: true, false и null. Поэтому тип bool? нельзя использовать в условных выражениях, например, с операторами if, for или while. Например, следующий код вызовет ошибку компиляции.
bool? b = null;
if (b) // Error CS0266.
{
}
Это запрещено, поскольку неизвестно, что обозначает null в контексте условного выражения. Чтобы использовать bool? в условном операторе, сначала проверьте его свойство HasValue, чтобы убедиться, что его значение отлично от null, а затем приведите его к bool. Дополнительные сведения см. в описании bool. Если выполняется приведение bool? со значением null, при проверке условия вызывается исключение InvalidOperationException. В следующем примере показан способ безопасного приведения от bool? к bool:
Пример
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.
}
См. также
Ссылки
Буквенные ключевые слова (справочник по C#)
Типы, допускающие значения NULL (Руководство по программированию на C#)
Оператор ?? (справочник по C#)