What does "DateTime?" mean in C#?

Alvin S picture Alvin S · Sep 21, 2008 · Viewed 64.6k times · Source

I am reading a .NET book, and in one of the code examples there is a class definition with this field:

private DateTime? startdate

What does DateTime? mean?

Answer

Thomas picture Thomas · Sep 21, 2008

Since DateTime is a struct, not a class, you get a DateTime object, not a reference, when you declare a field or variable of that type.

And, in the same way as an int cannot be null, so this DateTime object can never be null, because it's not a reference.

Adding the question mark turns it into a nullable type, which means that either it is a DateTime object, or it is null.

DateTime? is syntactic sugar for Nullable<DateTime>, where Nullable is itself a struct.