Perhaps my Google-Fu has failed me, but I haven’t been able to determine if comparing a nullable in .NET will always be less than something else.
I’ve got some code similar to this
MyClass findLatest(List<MyClass> items){
DateTime? latest_tstamp = null;
MyClass latest_item = null;
foreach(var item in items){
if (latest_tstamp < item.tstamp){
latest_tstamp = item.tstamp;
latest_item = item;
}
}
return latest_item;
}
It’s seemed to work in the few limited cases I’ve tried (item.tstamp is declared DateTime? tstamp as well, of course).
Is this guaranteed behavior?
Conclusion(?)
Based on the answers (and Jon Skeet’s [answer on another question]), I’ve gone with the following check:
if (item.tstamp != null &&
(latest_tstamp == null || latest_tstamp < item.tstamp)){
// do stuff
}
This is behavior is guaranteed by the C# specification. The result of
<on nullable value-types isfalseif any of them isnull. 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
nullcheck, or just a boolean flagisFirstElementinstead of using a nullable in the first place.(Quoted from C# Language Specification Version 3.0)