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?
-
A
Nullable<T>
is a structure consisting of a T and a bit flag indicating whether or not the T is valid. ANullable<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 forNullable<bool>
".spoulson : This didn't answer the question.Curt Hagenlocher : Yes, I realized that after seeing your answer. Thanks!From Curt Hagenlocher -
Null primitives are just regular primitives wrapped in Nullable. Any appearances to the contrary are just the compiler and syntactical sugar.
From Will -
A
bool
is a value type, therefore it can't contain a NULL value. If you wrap any value type withNullable<>
, it will give it that ability. Moreover, access methods to the value change by additional propertiesHasValue
andValue
.But to the question:
Nullable<bool>
andbool?
are aliases.Konrad Rudolph : Why is someone systematically downvoting correct answers?Chris Marisic : Even though this comment was from way back it's possible that they felt this answer duplicated other answers so they DV'd?spoulson : Apparently I'm not the fastest gun in the west. All the top answers are within a few minutes.From spoulson -
There is no difference between
bool? b = null
andNullable<bool> b = null
. The?
is just C# compiler syntax sugar.From samjudson -
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; }
rohancragg : hmm, not sure whether or not to up-vote this as it doesnt answer the question but it's useful and succinct nonetheless! ;-)Mark Ingram : Well, according to Joel you should up-vote if you find it useful - not neccessarily if it's the answer. But then I would say that ;)From Mark Ingram -
If you look at the IL using ILDasm, you'll find that they both compile down to Nullable<>.
From Steve Morgan -
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.
From morechilli
0 comments:
Post a Comment