I was wondering what was the most clean and understandable syntax for doing condition checks on nullable bools.
Is the following good or bad coding style? Is there a way to express the condition better/more cleanly?
bool? nullableBool = true;
if (nullableBool ?? false) { ... }
else { ... }
especially the if (nullableBool ?? false) part. I don't like the if (x.HasValue && x.Value)
style ...
(not sure whether the question has been asked before ... couldn't find something similar with the search)
Actually I think that
(nullableBool ?? false)
is a legitimate option especially when you are trying to evaluate a nullable bool in linq.For example:
array.Select(v => v.nullableBool ?? false)
(from v in array where v.nullableBool ?? false)
Is cleaner in my opinion as opposed to:
array.Select(v => v.nullableBool.HasValue ? v.nullableBool.Value : false)
(from v in array where v.nullableBool.HasValue ? v.nullableBool.Value : false)
If you only want to test for
true
againstnull
/false
, One I've just used and reads quite well isYou may not like it, but personally I find
the most readable. It makes it clear you are working with a nullable type and it makes it clear you are first checking whether the nullable type has a value before acting on it conditionally.
If you take your version and replace the variable with x also it reads:
Is that as clear? Is it obvious x is a nullable type? I'll let you decide.
Given enum
you can do it like here
If you want to treat a
null
as false, then I would say that the most succinct way to do that is to use the null coalesce operator (??
), as you describe:I think a lot of people concentrate on the fact that this value is nullable, and don't think about what they actually want :)
Or if you want more options...
(nullableBool == true)
will never return true if the bool? is null :P