I am extracting a bool
value from a (non-generic, heterogeneous) collection.
The as
operator may only be used with reference types, so it is no
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.