我发现自己需要运行一些旧的3.5框架遗留代码,并发现有一些地方必须以同步方式更新一大堆列表和字典。我决定通过合并这些内容到新的自定义容器类的自定义类中,可以使这个过程更易于使用和理解。然而,在组织这些新容器类的内容时,我遇到了一些问题,需要根据特定的内部属性进行排序。例如,按一个类的ID号属性排序。
由于容器类主要基于通用List对象,我的第一反应是为内部类编写IComparable,并编写比较属性的CompareTo方法。这样,当我想调用排序时,只需调用
然而,我考虑改为使用
我不喜欢过早或微观优化,但我喜欢一致性。我认为最好在适当的情况下坚持一种实现方式,并在必要时使用不同的实现方式。是否值得将我的代码转换为使用LINQ OrderBy而不是使用List.Sort?对于这些自定义容器,坚持使用IComparable实现是否更好?两种方法提供的任何重要机械优势应该权衡决策吗?或者它们的最终功能等同于程序员的偏好到了一个点?
由于容器类主要基于通用List对象,我的第一反应是为内部类编写IComparable,并编写比较属性的CompareTo方法。这样,当我想调用排序时,只需调用
items.Sort()
。然而,我考虑改为使用
items = items.OrderBy(Func)
。这样,如果我需要按任何其他属性排序,它就更加灵活。可读性也更好,因为用于排序的属性将与排序调用一起列在行内,而不必查找IComparable代码。结果,整个实现感觉更清洁。我不喜欢过早或微观优化,但我喜欢一致性。我认为最好在适当的情况下坚持一种实现方式,并在必要时使用不同的实现方式。是否值得将我的代码转换为使用LINQ OrderBy而不是使用List.Sort?对于这些自定义容器,坚持使用IComparable实现是否更好?两种方法提供的任何重要机械优势应该权衡决策吗?或者它们的最终功能等同于程序员的偏好到了一个点?
items.First()
жҜ”items[0]
ж…ўеҫ—еӨҡпјҹ - Grace NoteFirst()
是针对IList<T>
实现进行了优化,将返回list[0]
。我预计性能将是相同的。即使它直接使用枚举,仍然只有一个项目需要迭代,因此它可能只是微小的优化。 - Julien Lebosquain