zoukankan      html  css  js  c++  java
  • List泛型的应用

    在我看一个源程序的时候看到这个例子使用了IList<T>返回类型,因为上午刚刚总结过List<T>的详细用法,突然出现了IList<T>,感觉很奇怪,于是上网搜集了很多东西才明白了

    它们的区别,刚开始仅仅是看文字说明,但是怎么都不明白,后来看到了一个实例,然后接着

    看文字说明,豁然开朗啊,现在我先把这个实例程序写出来:

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace List
    {
        public class Users  //类Users  用户
        {
            public string Name; //  姓名
            public int Age;  //  年龄
            public Users(string _Name, int _Age)
            {
                Name = _Name;
                Age = _Age;
            }
        }
           
        class Program
        {
    
            static void Main(string[] args)
            {
    
                Users U = new Users("jiang", 24);
                
                IList<Users> UILists = new List<Users>(); 
     //千万要注意:等式的右边是List<Users>,而不是 IList<Users>,
    //如果在List前面加一个I, 就会出现错误:抽象类或接口无法创建实例。
                
                UILists.Add(U);
    
                U = new Users("wang", 22);
                UILists.Add(U);
    
                List<Users> I = ConvertIListToList<Users>(UILists);
    
                Console.WriteLine(I[0].Name);
                Console.WriteLine(I[1].Name);
    
                Console.Read();
            }
    
            // **//// <summary>
            /// 转换IList<T>为List<T>      //将IList接口泛型转为List泛型类型
            /// </summary>
            /// <typeparam name="T">指定的集合中泛型的类型</typeparam>
            /// <param name="gbList">需要转换的IList</param>
            /// <returns></returns>
            public static List<T> ConvertIListToList<T>(IList<T> gbList) where T : class   //静态方法,泛型转换,
            //T是泛型参数。where T : class  是对T的限制,这里的意思是T必须是引用类型,包括任何类、接口、委托或数组类型。
            { 
    if (gbList != null && gbList.Count >= 1)
    {
    List<T> list = new List<T>();
    for (int i = 0; i < gbList.Count; i++) //将IList中的元素复制到List中
    {
    T temp = gbList[i] as T;

    if (temp != null) list.Add(temp);
    }

    return list;
    }

    return null;
    }
    }
    }
    复制代码

     注意:

     IList<Users> UILists = new List<Users>();  //千万要注意:等式的右边是List<Users>,

    而不是 IList<Users>,如果在List前面加一个I, 就会出现错误:抽象类或接口无法创建实例。

    下面说一下IList与List的区别:

    (1)首先IList 泛型接口是 ICollection 泛型接口的子代,并且是所有泛型列表的基接口。

    它仅仅是所有泛型类型的接口,并没有太多方法可以方便实用,如果仅仅是作为集合数据的承载体,确实,IList<T>可以胜任。

    不过,更多的时候,我们要对集合数据进行处理,从中筛选数据或者排序。这个时候IList<T>就爱莫能助了。

    1、当你只想使用接口的方法时,ILis<>这种方式比较好.他不获取实现这个接口的类的其他方法和字段,有效的节省空间.

    2、IList <>是个接口,定义了一些操作方法这些方法要你自己去实现
    List <>是泛型类,它已经实现了IList <>定义的那些方法

    IList <Class1> IList11 =new List <Class1>();
    List <Class1> List11 =new List <Class1>();

    这两行代码,从操作上来看,实际上都是创建了一个List<Class1>对象的实例,也就是说,他们的操作没有区别。

    只是用于保存这个操作的返回值变量类型不一样而已。

    那么,我们可以这么理解,这两行代码的目的不一样。
    List <Class1> List11 =new List <Class1>();
    是想创建一个List<Class1>,而且需要使用到List<T>的功能,进行相关操作。

    IList <Class1> IList11 =new List <Class1>();
    只是想创建一个基于接口IList<Class1>的对象的实例,只是这个接口是由List<T>实现的。所以它只是希望使用到IList<T>接口规定的功能而已。

  • 相关阅读:
    Windows XP下 Android开发环境 搭建
    Android程序的入口点
    在eclipse里 新建android项目时 提示找不到proguard.cfg
    64位WIN7系统 下 搭建Android开发环境
    在eclipse里 新建android项目时 提示找不到proguard.cfg
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead
    Windows XP下 Android开发环境 搭建
    Android程序的入口点
  • 原文地址:https://www.cnblogs.com/sdya/p/4333110.html
Copyright © 2011-2022 走看看