资料说泛型的出现是为了不用装箱和拆箱,但我定义一个类的数组也不用装箱和拆箱啊
请问以下代码的custormerList和custormerArr有什么区别.
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {            List<Customer> custormerList = new List<Customer>();
            custormerList.Add(new Customer { CustomerID = 1, CustomerName = "张三" });
            custormerList.Add(new Customer { CustomerID = 2, CustomerName = "李四" });            Customer c1 = new Customer { CustomerID = 1, CustomerName = "张三" };
            Customer c2 = new Customer { CustomerID = 1, CustomerName = "张四" };
            Customer[] custormerArr = new Customer[] { c1, c2 };        }
    }
    public class Customer
    {
        public int CustomerID { get; set; }
        public string CustomerName { get; set; }
    }}

解决方案 »

  1.   

    说List<T>不需要装箱拆箱,主要是针对ArrayList这种元素类型为object的集合说的。另外List<T>的长度可变,可以Add和Remove操作,而数组长度是固定的。
      

  2.   

    如果没有Add和Remove,那两者是不是等价的
      

  3.   


    但我想知道泛型真正应用在哪里,能举下例子吗,,不要就传个类进去,就SHOW个类型出来这样,要实际应用
      

  4.   

    “比较法”在学校考试中很有用,但是在实际工作中一点用也没有。因为实际使用需要你理解它运用它而不是回答它和另外一个什么东西有什么不同,有什么优缺点,1、2、3、4。我举一个例子,比如在C# 1.0中定义委托是很麻烦的事情。(不知道委托你是否知道)我必须为每个委托用到的参数类型定义原型。在C# 3.0/4.0中,我们使用Func/Action系列泛型就全部解决了。Func<T>, Func<T1, T2>, Func<T1, T2, T3>... 只需要几个泛型,就可以涵盖几乎无穷多的委托类型。你用什么别的东西去和它比呢?
      

  5.   

    在C# 3.0/4.0中,你几乎不再需要写
    public void MyDelegate(int x, int y, string z); 这样的东西了。因为这个类型直接就可以表达为Action<int, int, string>。
      

  6.   

    我再举一个例子,比如在C# 1.0中,我们想实现一个比较器,我们这样定义基类:
    class Comparer
    {
        //当a>b,返回>0的数,相等返回0,b>a返回<0的数
        public virtual int CompareTo(object a, object b) { }
    }
    我们从它继承,比如我们定义一个比较日期的,我们可能希望这么写:
    class DateTimeComparer : Comparer
    {
        public override int CompareTo(DateTime a, DateTime b) { }
    }
    但是很抱歉,这么写是不能编译的。我们只能写
    class DateTimeComparer : Comparer
    {
        public override int CompareTo(object a, object b) { }
    }
    这样根本体现不了它是一个专门为DateTime比较而设计的类,有没有办法能实现呢?只能用泛型。