【转】List<T>和ILIst<T>的区别

在我看一个源程序的时候看到这个例子使用了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   //静态方法,泛型转换,
        {
            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>接口规定的功能而已。

原文看这里》》》

时间: 2024-10-17 14:37:10

【转】List<T>和ILIst<T>的区别的相关文章

List&lt;T&gt;和IList&lt;T&gt;的区别(转载)

List<T>和IList<T>的区别 对List<T>和IList<T>不是很清楚,这看到一篇不错的文章,贴过来了 List<T>类:表示可通过索引访问的对象的强类型列表,提供用于对列表进行搜索.排序和操作的方法. IList<T>接口:表示可按照索引单独访问的一组对象. 下面谈谈它们之间的区别: 首先,List<T>是一个类,IList<T>是一个接口.接口和类的区别是本质的,类是负责功能的实现,而接口则是

说说C#中IList与List区别

首先IList 泛型接口是 ICollection 泛型接口的子代,并且是所有泛型列表的基接口. 它仅仅是所有泛型类型的接口,并没有太多方法可以方便实用,如果仅仅是作为集合数据的承载体,确实,IList<T>可以胜任. 不过,更多的时候,我们要对集合数据进行处理,从中筛选数据或者排序.这个时候IList<T>就爱莫能助了. 1.当你只想使用接口的方法时,ILis<>这种方式比较好.他不获取实现这个接口的类的其他方法和字段,有效的节省空间. 2.IList <>

说说C#中list与IList中的区别(转载)

首先IList 泛型接口是 ICollection 泛型接口的子代,并且是所有泛型列表的基接口. 但是它仅仅是所有泛型类型的接口,并没有太多方法可以方便实用,如果仅仅是作为集合数据的承载体,确实,IList<T>可以胜任. 不过,更多的时候,我们要对集合数据进行处理,从中筛选数据或者排序.这个时候IList<T>就爱莫能助了. 1.当你只想使用接口的方法时,ILis<>这种方式比较好.他不获取实现这个接口的类的其他方法和字段,有效的节省空间. 2.IList <&

Entity Framework中使用IEnumerable&lt;T&gt;、IQueryable&lt;T&gt;及IList&lt;T&gt;的区别

1. IEnumerable<T> IEnumerable<T> :对于在内存中集合上运行的方法,返回的可枚举对象将捕获传递到方法的参数.在枚举该对象时,将使用查询运算符的逻辑,并返回查询结果. IEnumerable<T>在.Net2.0引入. IEnumberable使用的是LINQ to Object方式,将AsEnumerable()时对应的所有记录先加载到内存,再在此基础上再执行后面的Query. 本地数据源用IEnumerable<T>,并且查询

IQueryable、IEnumberable 、IList与List区别

基本概念: IEnumerable:使用的是LINQ to Object方式,它会将AsEnumerable()时对应的所有记录都先加载到内存,然后在此基础上再执行后来的Query IQeurable(IQuerable<T>):不在内存加载持久数据,因为这家伙只是在组装SQL,(延迟执行) 到你要使用的时候,例如 list.Tolist() or list.Count()的时候,数据才从数据库进行加载 (AsQueryable()). IList(IList<T>):泛型接口是

Entity Framework中IQueryable, IEnumerable, IList的区别

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的SQL以发现问题所在. 使用过Toplink的

IEnumerable,ICollection,IList,List之间的区别【转】

做C#的同学们,都知道,一类只能有一个继承类,但可以实现多个接口.这句话就告诉我们:IEnumerable,ICollection,IList,List区别了 首先我看看 IEnumerable: // 摘要: // 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代. // // 类型参数: // T: // 要枚举的对象的类型. [TypeDependency("System.SZArrayHelper")] public interface IEnumerable<ou

C# —— IList, ArrayList与List的区别详解

共同点: IList, List , ArrayList 通俗一点来讲就是广义的数组,C#里面称之为集合.不同于一般的狭义的数组,它们可以存放任意类型的东西,在申明或者赋值的时候指定. 比如你写了一个类 Cake,然后想有一个结构来存放很多Cake的实例,那就可以用他们. 区别: IList与List 通俗一点讲,只能存放同一类型的元素. 比如声明的时候 声明为List<Cake> cakes=new List<Cake>(); 那么就只能用放cake的实例. 在从cakes这个变

ASP.NET的IList&lt;T&gt;和List&lt;T&gt;区别(转)

首先IList泛型接口,是 ICollection泛型接口的子代,并且是所有泛型列表的基接口. 它仅仅是所有泛型类型的接口,并没有太多方法可以方便实用,如果仅仅用作数据集合的承载体,IList <T>可以实现. 然而,经常我们需要对集合数据进行处理,如筛选或排序,这时就需要用List <T>.它们的主要区别在于: 1.当你只想使用接口的方法时,IList <>这种方式比较好.它不获取实现这个接口的类的其他方法和字段,可以节省空间. 2.IList <>是个接