There are two options… with slightly surprising performance:
-
Redundant checking:
if (rawValue is bool) { bool x = (bool) rawValue; ... } -
Using a nullable type:
bool? x = rawValue as bool?; if (x != null) { ... // use x.Value }
The surprising part is that the performance of the second form is much worse than the first.
In C# 7, you can use pattern matching for this:
if (rawValue is bool value)
{
// Use value here
}
Note that you still end up with value in scope (but not definitely assigned) after the if statement.