protected void Button1_Click(object sender, EventArgs e)
    {        List<Users> listUser = new List<Users>();
        Users listInsert=new Users();
        listInsert.Name="张三";
        listInsert.Age=1;
        listUser.Add(listInsert);
        
    }
}
public class Users
{
    //构造函数
    private int  _Age;
    private string _Name;
    
    public int Age
    {
        set{_Age=value;}
        get { return _Age; }
    }
    public string Name
    {
        set { _Name = value; }
        get { return _Name; }
    }}大家来看看这段代码为什么要这样写?加上泛型有什么作用?

解决方案 »

  1.   

    List<T>和arraylist的区别。这样写,可以确定list里面成员的类型,而不像arraylist,都unbox成object
      

  2.   

    List<Users> listUser = new List<Users>();以后,listUser.Add(listInsert); 后面就只能  Add (  Users  ) 类,别的类加不进去。从列表中取数据的时候,直接取,不需要强制类型转换Users a = listUser[0];如果不是泛型ArrayList listUser = new ArrayList();
    那么我想加什么进去都行我可以 
    listUser.Add("ABCDE");
    然后再
    listUser.Add( new Integer(12345) );从列表中取数据出来的时候,要强制转换String a = (String) listUser[0];
    Integer b = (Integer) listUser[1];
    在没有泛型以前,整天要强制转换,真是很痛苦的啊……
      

  3.   

    泛型是强类型,泛型List<User>只允许存放User类型的对象。。可以在编译时进行类型检查。。同一种类型,不需要装箱,拆箱进行类型转换。。提高效率
      

  4.   

    List<Users> listUser = new List<Users>();  这个就是Users的集合  是个动态数组
    listUser.Add(Users类型)  添加的是Users类型 取出来也是Users类型
    而且泛型中还提供了大量的辅助方法....方便操作
    Users[] user = new Users[10];  是个静态数组ArrayList list = new ArrayList();  虽然是个动态数组,但是Add(Object)  要进行装箱操作,取值的时候还要拆箱.........这个是泛型最简单的用法了..........楼主  用多了自然就明白了........而且是越用越上瘾啊  呵呵
      

  5.   


    protected void Button1_Click(object sender, EventArgs e)
        {        List<Users> listUser = new List<Users>();
            Users listInsert=new Users();
            listInsert.Name="张三";
            listInsert.Age=1;
            listUser.Add(listInsert);
            
        }//楼主  代码是没写完整吧  List<Users> listUser = new List<Users>();
     写在里面有什么用List<Users> listUser = new List<Users>();
    protected void Button1_Click(object sender, EventArgs e)
        {
            Users listInsert=new Users();
            listInsert.Name="张三";
            listInsert.Age=1;
            listUser.Add(listInsert);
            
        }
    }
      

  6.   

    http://www.tracefact.net/CSharp-Programming/Generics-In-CSharp.aspx
    推荐 张子阳的博文
      

  7.   

    这里的Add方法是
    List<>里面的方法
      

  8.   

    不要为了范型而范型,否则你不能理解也正常了,范型是模板,例如List<T>,你可以往里面塞任何类型来实现一个动态的强类型的数组。关键要以需要、需求为思考着眼点。
      

  9.   

    我觉得在操纵值类型(struct int float 等)的时候,list<T>的效率要比ArrayList高很多,因为ArrayList中操作的是object类型,如果传入了值类型的实参,会出现box,将arrayList中的数据取出的时候又会有unbox。 而list<T>可以在运行时确定类型,因而也就避免了box和unbox,同时也可以让编译器检查出如下的错误情况:public struct Point
        {
            public Point(float X, float Y)
            {
                x = X;
                y = Y;
            }
            private float x;
            private float y;        public void Print()
            {
                Console.WriteLine("{0},{1}", x, y);
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                ArrayList al = new ArrayList();            Point []p = new Point[3]
                {new Point(1.0f, 2.0f), new Point(3.0f, 4.0f), new Point(5.0f, 6.0f)};
                al.Add(p[0]);            /////////////////////////
                //A lot of codes
                ///////////////////////            al.Add(1);//此处误操作            /////////////////////////
                //A lot of codes
                ///////////////////////            al.Add(p[2]);           
            }
      

  10.   

    我的意思是要这: protected void Button1_Click(object sender, EventArgs e)
        {        List<Users> listUser = new List<Users>();
            Users listInsert=new Users();
            listInsert.Name="张三";
            listInsert.Age=1;
            listUser.Add(listInsert);
            
        }
    }跟 Users listInsert=new Users();
            listInsert.Name="张三";
            listInsert.Age=1;有何区别?
      

  11.   

    一个是将实例化的对象添加到list里面,一个是单独实例化。 区别?
      

  12.   

    用泛型,c#是类型安全的语言,如果不使用强类型,肯定免不了boxing和unboxing,也就是我们提到的装箱和拆箱,降低了程序的性能。 因为所有的类型都是继承自object.
    泛型实现代码重用。 如果一段代码接受int类型的参数,当你用了一段时间,老板让你改,让他接受string类型的参数。那么你的解决办法可能是复制粘贴,修改一下int的部分。 但是如果后来还需要增加其他的话,这样的处理方式肯定是不行的。
    但是当我们定义一个方法: public class User<T>{}
    这个T可以由任何类型来替代。 可以是 User<int>, User<string>。
      

  13.   


     List<Users> listUser = new List<Users>();
            Users listInsert=new Users();
            listInsert.Name="张三";
            listInsert.Age=1;
            listUser.Add(listInsert);
    实际从数据库去除数据加载LIST的时候不也是要去做数据转换吗?
      

  14.   

    区别是前一部分代码是new一个user类,加入List<User>中,后面的就是new一个User了
      

  15.   


    new一个user类?能说具体点吗?
      

  16.   

    晕,原来是问这个
    我这么比方,前面那个list是个大袋子,把你的user实例装进去了,以后有新的user1,user2,也可以装到list里面。有点像数组,懂不?不过原理是不一样的
    后面那个仅仅new了个user而已。就像单个的int
      

  17.   

    当使用ArrayList中的元素时,必须要进行强制类型转换将元素转换为合适的元素类型,如果元素是值类型的值时,会引起CLR进行拆箱装箱操作,造成一定性能开销,还必须小心处理类型转换中可能出现的错误。泛型能处理这种形式的不足,经由指定一个或多个类型占位符,在处理类型操作时,不用知道具体类型,而将具体类型的指定交由运行时来实现,泛型集合类型使集合能处理多个类型,而又不用重复编码。
      

  18.   

    List <Users> listUser=new List <Users>(); 
            Users listInsert=new Users(); 
            Users listInsert1=new Users(); 
            Users listInsert2=new Users(); 
            Users listInsert3=new Users(); 
     这样?这样具体作用,Users 只是一个实体类,实例这么多出来有何作用?
      

  19.   

    http://topic.csdn.net/u/20090622/21/df7f7b8a-61cd-4c8f-a964-0fe15377523d.html?11707