bool? ispurchased = null;
var pospurcahsed= ispurchased ? \"1\":\"2\";
Its generating exception .
Cannot implicitly con
You should use .value
bool? ispurchased = null;
if (ispurchased.HasValue)
{
var pospurcahsed = ispurchased.Value ? "1" : "2";
}
This is not allows because it is unclear what null means in the context of a conditional.
Nullable Booleans
can be cast to a bool
explicitly in order to be used in a conditional, but if the object has a value if null, InvalidOperationException
will be thrown.
It is therefore important to check the HasValue property before casting to bool
.
Use like
var pospurcahsed= (ispurchased.HasValue && ispurchased.Value) ?......
Nullable Booleans are similar to the Boolean variable type used in SQL. To ensure that the results produced by the & and | operators are consistent with SQL's three-valued Boolean type, the following predefined operators are provided:
bool? operator &(bool? x, bool? y)
bool? operator |(bool? x, bool? y)
or you can use martin
suggestion GetValueOrDefault
[Thanks to martin to pointing it out ]
The GetValueOrDefault method returns a value even if the HasValue
property is false (unlike the Value property, which throws an exception).
You can't use Nullable<bool>
or bool?
in condition directly, instead use it like:
var pospurcahsed= (ispurchased.HasValue && ispurchased.Value) ? "1":"2";
You can use something like this
bool? chk = false;
//or
bool? chk2 = false;
var test = (chk != null && (bool)chk) ? "1": "2";
//or
var test2 = (chk2.HasValue && (bool)chk2) ? "1" : "2";
I would suggest don't use var
keyword for known types.
Instead of this use Like this:
String test = (chk != null && (bool)chk) ? "1" : "2";
The issue you have is that the conditional operator ? :
expects a bool
, not a bool?
. You could just cast it and be done, but you'd get an InvalidOperationException
if the value contained a null
, so you should probably check for that first.
Given the name of your variable, I've gone ahead and assumed you'd want to treat a null
as you would false
, so in the code below I check to ensure it has a value, and if it does then it'll use it in the condition. In the event it doesn't have a value (i.e. it's null
then the cast will never happen and you won't get the error (the expression would evaluate to false).
bool? ispurchased = null;
var pospurcahsed = (ispurchased.HasValue && (bool)ispurchased) ? "1":"2";