自定义对象的比较系列二之实现IComparable<T>
2009-05-07 12:09 Virus-BeautyCode 阅读(399) 评论(0) 编辑 收藏 举报
要进行排序的对象


using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class MemberEntity11 : IComparable<MemberEntity11>
{
#region
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
private DateTime _birth;
public DateTime Birth
{
get { return _birth; }
set { _birth = value; }
}
#endregion
public int CompareTo(MemberEntity11 obj)
{
MemberEntity11 member = obj as MemberEntity11;
return string.Compare(this._name, member._name);
}
private class sortByAgeAscHelper : IComparer<MemberEntity11>
{
public int Compare(MemberEntity11 a, MemberEntity11 b)
{
MemberEntity11 m1 = a as MemberEntity11;
MemberEntity11 m2 = b as MemberEntity11;
if (m1._age > m2._age)
return 1;
if (m1._age < m2._age)
return -1;
else
return 0;
}
}
private class sortByAgeDescHelper : IComparer<MemberEntity11>
{
public int Compare(MemberEntity11 a, MemberEntity11 b)
{
MemberEntity11 m1 = a as MemberEntity11;
MemberEntity11 m2 = b as MemberEntity11;
if (m1._age < m2._age)
return 1;
if (m1._age > m2._age)
return -1;
else
return 0;
}
}
private class sortByNameDescHelper : IComparer<MemberEntity11>
{
public int Compare(MemberEntity11 a, MemberEntity11 b)
{
MemberEntity11 m1 = a as MemberEntity11;
MemberEntity11 m2 = b as MemberEntity11;
return string.Compare(m2._name, m1._name);
}
}
public static IComparer<MemberEntity11> sortByAgeAsc()
{
return (IComparer<MemberEntity11>)new sortByAgeAscHelper();
}
public static IComparer<MemberEntity11> sortByAgeDesc()
{
return (IComparer<MemberEntity11>)new sortByAgeDescHelper();
}
public static IComparer<MemberEntity11> sortByNameDesc()
{
return (IComparer<MemberEntity11>)new sortByNameDescHelper();
}
}
}
排序示例代码


using System;
using System.Collections.Generic;
using System.Linq;
using System.Collections;
using System.Text;
using Microsoft.SharePoint;
using System.Data;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Publishing;
using System.IO;
using System.Xml.XPath;
using System.Xml;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<MemberEntity11 > memberList = new List<MemberEntity11> ()
{
new MemberEntity11(){ Name="aaa", Age =12},
new MemberEntity11(){ Name="ccc" ,Age=14},
new MemberEntity11(){ Name="bbb", Age=15}
};
Console.WriteLine("List -UnSorted\n");
foreach (MemberEntity11 m in memberList)
{
Console.WriteLine(m.Name +"\t\t"+m.Age.ToString());
}
memberList.Sort();
Console.WriteLine("List -Sorted by Name Asc");
foreach (MemberEntity11 m in memberList)
{
Console.WriteLine(m.Name + "\t\t" + m.Age.ToString());
}
memberList.Sort(MemberEntity11.sortByNameDesc());
Console.WriteLine("List -Sorted by Name Desc");
foreach (MemberEntity11 m in memberList)
{
Console.WriteLine(m.Name + "\t\t" + m.Age.ToString());
}
memberList.Sort(MemberEntity11.sortByAgeAsc ());
Console.WriteLine("List -Sorted by Age Asc");
foreach (MemberEntity11 m in memberList)
{
Console.WriteLine(m.Name + "\t\t" + m.Age.ToString());
}
memberList.Sort(MemberEntity11.sortByAgeDesc ());
Console.WriteLine("List -Sorted by Age Desc");
foreach (MemberEntity11 m in memberList)
{
Console.WriteLine(m.Name + "\t\t" + m.Age.ToString());
}
Console.WriteLine("it is ok,按任意键结束");
Console.ReadKey();
}
}
}
排序结果图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构