Federico
Federico

Reputation: 43

Cast to bool nullable of null value VS default value of bool nullable

Is there any difference between those two ways to write the same thing?

int? foo = GetValueOrDefault();

var obj = new
{
    //some code...,
    bar = foo.HasValue ? foo > 0 : (bool?)null
}

VS

int? foo = GetValueOrDefault();

var obj = new
{
    //some code...,
    bar = foo.HasValue ? foo > 0 : default(bool?)
}

Upvotes: 4

Views: 384

Answers (1)

Tim Schmelter
Tim Schmelter

Reputation: 460168

It is the same. A Nullable<bool> is a struct and the language specification states:

The default value of a struct is the value produced by setting all fields to their default value (§15.4.5).

Since a Nullable<T> has these two fields:

private bool hasValue; // default: false
internal T value;  // default value of T, with bool=false

So yes, using default(bool?) has the same effect as using (bool?)null, because (bool?)null is also a Nullable<bool> with hasValue=false(same as using new Nullable<bool>()).

Why you can assign null at all to a Nullable<T> which is a struct, so a value type? Well, that is compiler magic which is not visible in the source.

Upvotes: 4

Related Questions