DateTime作为SortedDictionary中的键<k,v =“”> </k,>

时间:2009-01-17 10:50:40

标签: .net collections

我可以安全地使用DateTime作为SortedDictionary<K, V>中的密钥,而无需实现我自己的IComparer吗?

我已经尝试过了,并且维护了排序顺序,重要的是我的目的.ContainsKey<T>方法按预期工作。但我只是想在自己走这条路之前仔细检查。

3 个答案:

答案 0 :(得分:10)

我工作得很好,因为DateTime实现了IComparable<DateTime>。所以你可以依赖Comparer(T).Default

在内部,DateTime使用刻度来比较2个日期。

答案 1 :(得分:7)

您不需要新的IComparer。 您的默认IComparer将使用您的值对象中的GetHashCode()并与之进行比较/排序。由于DateTime类型正确实现了GetHashCode(),因此默认IComparer将按您的意愿排序(就像您发现的那样)。

创建新的比较器更适用于您自己编写的复杂集合。我写过一次复杂的比较器。这有点令人兴奋。

答案 2 :(得分:5)

我没有预见到任何问题;在幕后,该值是一个长刻度值。

另外,请确保所有值都基于同一时区 - 我个人使用UTC / GMT进行存储和计算,并仅在显示时调整为当地时间。