In C# are the nullable primitive types (i.e. bool?) just aliases for their corresponding Nullable<T> type or is there a difference between the two?
views:
10409answers:
7A Nullable<T> is a structure consisting of a T and a bit flag indicating whether or not the T is valid. A Nullable<bool> has three possible values: true, false and null.
Edit: Ah, I missed the fact that the question mark after "bool" was actually part of the type name and not an indicator that you were asking a question :). The answer to your question, then, is "yes, the C# bool? is just an alias for Nullable<bool>".
Null primitives are just regular primitives wrapped in Nullable. Any appearances to the contrary are just the compiler and syntactical sugar.
A bool is a value type, therefore it can't contain a NULL value. If you wrap any value type with Nullable<>, it will give it that ability. Moreover, access methods to the value change by additional properties HasValue and Value.
But to the question: Nullable<bool> and bool? are aliases.
There is no difference between bool? b = null and Nullable<bool> b = null. The ? is just C# compiler syntax sugar.
To access the value of the bool? you need to do the following:
bool? myValue = true;
bool hasValue = false;
if (myValue.HasValue && myValue.Value)
{
hasValue = true;
}
Note you can't just do:
if (myValue)
{
hasValue = true;
}
If you look at the IL using ILDasm, you'll find that they both compile down to Nullable<>.
No there is no difference. In summary:
System.Boolean -> valid values : true, false
bool -> alias for System.Boolean
Nullable<bool> -> valid values : true, false, null
bool? -> alias for Nullable<bool>
Hope this helps.