Dan Davies Brackett
Dan Davies Brackett

Reputation: 10071

are C# int? and bool?s always boxed when hasvalue = true?

This MSDN reference seems to indicate that when an int? (or any Nullable<T>) has a value, it's always boxed (and hence a much less efficient store of data, memory-wise than an int). Is that the case?

Upvotes: 12

Views: 1276

Answers (3)

BC.
BC.

Reputation: 24918

No. The Nullable object is a generic struct, and internally handles the value of T without boxing.

Upvotes: 3

Tim Robinson
Tim Robinson

Reputation: 54734

That's not the case. Nullable<T> is generic, so it holds the real int or bool.

The MSDN page is talking about what happens when you box a Nullable<int> or Nullable<bool>. If you never assign your nullable struct to an object variable, you won't incur boxing overhead.

Upvotes: 2

Justin Niessner
Justin Niessner

Reputation: 245429

That page refers to when you are boxing the Nullable<T> struct, not the values inside the struct itself.

There is no boxing involved in storing a nullable type until you try boxing the nullable itself:

int? a = 42; // no boxing
int? n = null; // no boxing

object nObj = n; // no boxing
object aObj = a; // only now will boxing occur

This behavior is no different than when boxing a regular value type (with the exception of handling the null case) so it is really to be expected.

Upvotes: 13

Related Questions