• C#中IList<T>与List<T>的区别


    今天写代码是遇到这样一段:

    1 IList IList11 =new List ();
    2 List List11 =new List ();

    百度了很多,稀里糊涂的就先记下来,做个总结。

    首先IList 泛型接口是 ICollection 泛型接口的子代,并且是所有泛型列表的基接口。
    它仅仅是所有泛型类型的接口,并没有太多方法可以方便实用,如果仅仅是作为集合数据的承载体,确实,IList可以胜任。
    不过,更多的时候,我们要对集合数据进行处理,从中筛选数据或者排序。这个时候IList就爱莫能助了。

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

    2、IList <>是个接口,定义了一些操作方法 这些方法要你自己去实现

    List <>是个类型  已经实现了IList <>定义的那些方法

    List <Class1> List11 =new List <Class1>(); 
    是想创建一个List <Class1>,而且需要使用到List <T>的功能,进行相关操作。 
    而 IList <Class1> IList11 =new List <Class1>();

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

    接口实现松耦合...有利于系统的维护与重构...优化系统流程...

     另外在提供一个datatable转list<>的代码:

     1 public static IList<T> GetList<T>(DataTable table)
     2 {
     3     IList<T> list = new List<T>(); //里氏替换原则
     4     T t = default(T);
     5     PropertyInfo[] propertypes = null;
     6     string tempName = string.Empty;
     7     foreach (DataRow row in table.Rows)
     8     {
     9         t = Activator.CreateInstance<T>(); ////创建指定类型的实例
    10         propertypes = t.GetType().GetProperties(); //得到类的属性
    11         foreach (PropertyInfo pro in propertypes)
    12         {
    13             try
    14             {
    15                 tempName = pro.Name;
    16                 if (table.Columns.Contains(tempName.ToUpper()))
    17                 {
    18                     object value = row[tempName];
    19                     if (value is System.DBNull)
    20                     {
    21                         value = "";
    22                     }
    23                     pro.SetValue(t, value + "", null);
    24                 }
    25             }
    26             catch (Exception)
    27             {
    28                 pro.SetValue(t, "", null);
    29             }
    30         }
    31         list.Add(t);
    32     }
    33     return list;
    34 }   

    其中   T t = default(T); //就是返回T的默认值。比如说T的类型是int类型的,那么这个default(T)的值就是0的;如果是string类型的话,这个返回值就是“”空字符串的。

    参考博客:https://blog.csdn.net/bytxl/article/details/44033823

    https://blog.csdn.net/sibaison/article/details/68059297

  • 相关阅读:
    ADexplorer
    Ldap登陆AD(Active Directory)进行认证的Java示例
    通过LDAP验证Active Directory服务
    APACHE + LDAP 的权限认证配置方法
    How to authenticate a user by uid and password?
    js汉字与拼音互转终极方案,附简单的JS拼音输入法【转】
    给MySQL增加mysql-udf-http和mysql-udf-json自定义函数,让MySQL有调用http接口和查询直接回JSON的能力
    CentOS6.7安装RabbitMQ3.6.5
    CentOS利用inotify+rsync实现文件同步
    CentOS两台服务器利用scp拷贝文件
  • 原文地址:https://www.cnblogs.com/Lvkang/p/9480856.html
Copyright © 2020-2023  润新知