The compiler is telling you that it doesn't know how convert null
into a DateTime
.
The solution is simple:
DateTime? foo;
foo = true ? (DateTime?)null : new DateTime(0);
Note that Nullable<DateTime>
can be written DateTime?
which will save you a bunch of typing.
FYI (Offtopic, but nifty and related to nullable types) we have a handy operator just for nullable types called the null coalescing operator
??
Used like this:
// Left hand is the nullable type, righthand is default if the type is null.
Nullable<DateTime> foo;
DateTime value = foo ?? new DateTime(0);
It's because in a ternary operator, the two values must resolve to the same type.
I know this question was asked in 2008 and it is now 5 years later but the answer marked as an answer does not satisfy me. The real answer is that DateTime is a struct, and as a struct it is not compatible with null. You have two ways of solving that:
First is to make null compatible with DateTime (for instance, cast null to DateTime? as the gentleman with 70 upvotes suggests, or cast null to Object or to ValueType).
The second is to make the DateTime compatible with null (for instance, cast DateTime to DateTime?).
Another solution similar to the accepted is to use C#'s default
keyword. While defined using generics, it is actually applicable to any type.
Example usage applied to the OP's question:
Nullable<DateTime> foo;
foo = true ? default(DateTime) : new DateTime(0);
Example usage with the current accepted answer:
DateTime? foo;
foo = true ? default(DateTime) : new DateTime(0);
Also, by using default
, you do not need to specify the variable as nullable
in order to assign it a null
value. The compiler will auto-assign the specific variable-type's default value and no error will be encountered. Example:
DateTime foo;
foo = true ? default(DateTime) : new DateTime(0);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With