关于c# 泛型List集合对象的用法及相关操作

今晚终于静下心来下写自己的BLOG
关于.net framework 2.0推出“泛型”,学习体会了下当中LIST<T>基本的用法及原理
由于之前的版本中,集合
CLASS A,CLASS B
//实例化A,B类对象
ArrayList  list=new ArrayList();
//此参数为object value
//编译器些时,并不为检查object类型
list.add(A);list.add(B);
//当去遍历list集合对象时
foreach(A a in list)
{
 console.Write((A)a);
}
运行时,程序报错,原因在于遍历list集合时转型中,有不是A对象的实例类型B
在2.0中已经解决些问题,就是“泛型”用法
CLASS A,CLASS B
//实例化A,B类对象
List<A> mylist=new List<A>();
mylist.add(a);mylist.add(b);
//此时统译时会报错,因为在声名时List<A>已经约束其集合的类型,也就是参数class A的实例
//下面我们来进行集的几中基本操作
//Comparable 集合中对象的比较排序
//如果学习之前学过C++的操作符赋重载,理解这个知识点并不难
//集合中对象比较本质是比较对象中成员属性变量的值
//编译器本身是不知道怎么样去比较的,而是需要我们自己编写代码来告诉编译器比较的规则
//在C# 中为一个类定义这样的比较规则,必须继承一个IComparable(比较)的接口,来实现些功能
//因为在此IComparable接口中
public interface IComparable
{
   //些方法需要自己实现,就是比较的规则
    int CompareTo(Object obj)
}
例如:
Class A:IComparable
{
    //成员属性
    private string _name;
 
    public int CompareTo(object obj)
    {
        //判断比较对象是否是Class A对象
        if(!obj is A)
        {
            throw new Exception("只能与Class A对象比较");
        }
        //将参数转换为Class A对象
        A a=obj as A;
        return this._name.CompareTo(a._Name);
    }
}
//当一个类实现上面代码功能时
Class A a1,Class A a2;
List<A> mylist=new List<A>();
mylist.add(a1);mylist.add(a2);
//进行集合排序时
mylist.sort()
foreach(A a in mylist)
{
  //此时显示的结果,为按字母升序排列
     console.Write(a.name);
}
如果类中,其它属性需要比较排序,既然如此泡制既可.
2008/5/18晚
posted on 2008-10-25 22:58  草原和大树  阅读(3350)  评论(0编辑  收藏  举报