Is a null value in .NET DateTime guaranteed to be less than a real value?
In this case it will never be true
. A comparison between nullable values where one of the values is null
always produces false. Hence the if
comparison will never be true here and latest_item
will never be set to a value
This is behavior is guaranteed by the C# specification. The result of <
on nullable value-types is false
if any of them is null
. Reference types on the other hand might exhibit different behavior.
Still I wouldn't recommend using this. It's hard to understand this code. I'd prefer an explicit null
check, or just a boolean flag isFirstElement
instead of using a nullable in the first place.
7.2.7 Lifted operators
Lifted operators permit predefined and user-defined operators that operate on non-nullable value types to also be used with nullable forms of those types. Lifted operators are constructed from predefined and user-defined operators that meet certain requirements, as described in the following:
...
- For the relational operators
<
>
<=
>=
a lifted form of an operator exists if the operand types are both non-nullable value types and if the result type isbool
. The lifted form is constructed by adding a single?
modifier to each operand type. The lifted operator produces the valuefalse
if one or both operands arenull
. Otherwise, the lifted operator unwraps the operands and applies the underlying operator to produce thebool
result.
(Quoted from C# Language Specification Version 3.0)
Quote from MSDN:
When you perform comparisons with nullable types, if the value of one of the nullable types is null and the other is not, all comparisons evaluate to false except for
!=
(not equal). It is important not to assume that because a particular comparison returns false, the opposite case returns true. In the following example, 10 is not greater than, less than, nor equal to null. Onlynum1 != num2
evaluates to true.An equality comparison of two nullable types that are both null evaluates to true.