实现IComparable<T>是否足够支持List排序?需不需要IComparer?
问题解答
当你的StreamInfo类实现了IComparable<StreamInfo>接口并完成了CompareTo方法的自定义实现后,直接调用List<StreamInfo>.Sort()的无参数重载时,会自动采用你定义的CompareTo逻辑来完成排序。这是因为.NET的List<T>默认排序逻辑会优先校验元素类型是否实现了IComparable<T>接口,一旦确认实现,就会依托该接口的CompareTo方法进行元素比较。
你不需要额外实现继承自IComparer<StreamInfo>的类并传入Sort方法,除非你需要在特定场景下使用与默认规则不同的排序逻辑——这种情况下,才需要自定义IComparer<StreamInfo>实现类,并通过Sort(IComparer<T>)重载方法指定该自定义比较器。
示例代码参考
public class StreamInfo : IComparable<StreamInfo> { public int Property1 { get; set; } public string Property2 { get; set; } public DateTime Property3 { get; set; } public bool Property4 { get; set; } public int CompareTo(StreamInfo other) { if (other == null) return 1; // 自定义比较逻辑:先按Property1排序,再按Property2排序 int prop1Compare = Property1.CompareTo(other.Property1); if (prop1Compare != 0) return prop1Compare; return Property2.CompareTo(other.Property2); } } // 默认排序调用示例 var streamList = new List<StreamInfo>(); // 向列表添加元素... streamList.Sort(); // 自动使用自定义的CompareTo逻辑排序
内容的提问来源于stack exchange,提问作者Saher Ahwal
相关产品推荐
相关产品推荐

