如何在两个字符串字段上实现IComparable接口?
使用下面的Person类示例.如果将Person对象添加到列表中.如何根据Surname first THEN Forename对列表进行排序?
Class Person { public string Surname { get; set; } public string Forname { get; set; } }
就像是? :
myPersonList.sort(delegate(Person p1,Person p2) { return p1.Surname.Compareto(p2. Surname); });
解决方法
或者你可以像这样排序一个列表:
myPersonList.sort(delegate(Person p1,Person p2) { int result = p1.Surname.Compareto(p2.Surname); if (result == 0) result = p1.Forname.Compareto(p2.Forname); return result; });
或者你可以让Person实现IComparable< Person>用这种方法:
public int Compareto(Person other) { int result = this.Surname.Compareto(other.Surname); if (result == 0) result = this.Forname.Compareto(other.Forname); return result; }
编辑正如Mark评论的那样,您可能决定需要检查空值.如果是这样,您应该决定是否应该将空值分类到顶部或底部.像这样的东西:
if (p1==null && p2==null) return 0; // same if (p1==null ^ p2==null) return p1==null ? 1 : -1; // reverse this to control ordering of nulls
原文地址:https://www.jb51.cc/csharp/243620.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。