Code Bye

IList<T>如何转成List<T>

 

IList<T>仅仅是所有泛型类型的接口,并没有太多方法可以用,如果仅仅是作为集合数据的承载体,那么IList<T>可以胜任。但是更多的时候,我们要对集合数据进行处理,从中筛选数据或者排序。这个时候IList<T>就爱莫能助了。
用过NHibernate和MyBatis.Net的人知道,查询数据库返回的结果集经常是IList<T>类型的,如何才能转成List<T>呢?

转换不了,至少不一定能转换,比如
class MyClass<T> : Ilist<T>
{
    …
}

你能把MyClass<T>转换成List<T>么?

当然,Linq为IEnumerable<T>实现了List<T> ToList()扩展方法

你可以用 mylist.ToList() 去“转换”,但是这其实是创建了一个新的List,并且复制了元素。

IList<T> ilist=newList<T>();

IList<T> ilist=new List<T>();


20分
IList<int> s=…
var b= s as List<int> ?? new List<int>(s); 
IList<T> ilist=new List<T>();
别考虑转换了,在需要处理数据的时候,ToList()吧。。。。
5分
public List<T> IListToList<T>(IList<T> list) {
 T [] array = new T[list.Count];
 list.CopyTo(array,0);
 return new List<T>(array);
}
引用 7 楼 whowhen21 的回复:

C# code?12345public List<T> IListToList<T>(IList<T> list) { T [] array = new T[list.Count]; list.CopyTo(array,0); return new List<T>(array);}

你那还是转换么?不就是IList<T>.ToList()么。。。。

4楼神人啊,看样子随手写的都没经过测试
我测试2种都通过了
就是不知道效率怎么样
5分
引用 7 楼 whowhen21 的回复:

C# code?12345public List<T> IListToList<T>(IList<T> list) { T [] array = new T[list.Count]; list.CopyTo(array,0); return new List<T>(array);}

脱裤子放屁,典型的。使用C#在没有特殊需求的情况下重复造轮子的行为是可耻的。

首先
public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable
而IEnumerable<T>有扩展方法,可以直接用
public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source);
而且List<T>有如下构造函数
public List(IEnumerable<T> collection);

wddw1986 莫要人身攻击啊
不过你说的我看不大懂
你是说IEnumerable的扩展方法能直接转的吗?
List<T>的构造函数能说详细些吗
5分
List<T> list=(List<T>)ilist;

难道是List<T> b = new List<T>(IList);
引用 11 楼 tangjun147 的回复:

wddw1986 莫要人身攻击啊
不过你说的我看不大懂
你是说IEnumerable的扩展方法能直接转的吗?
List<T>的构造函数能说详细些吗

简单点说,IList<T>直接转换为List<T>可以不用考虑。
IList<T>可以用至少2种方式简单的复制成List<T>:
1、IList<T>.ToList()
2、new List(IList<T>)

5分
不好意思
2、new List<T>(IList<T>)
引用 14 楼 marclee44 的回复:
Quote: 引用 11 楼 tangjun147 的回复:

wddw1986 莫要人身攻击啊
不过你说的我看不大懂
你是说IEnumerable的扩展方法能直接转的吗?
List<T>的构造函数能说详细些吗

简单点说,IList<T>直接转换为List<T>可以不用考虑。
IList<T>可以用至少2种方式简单的复制成List<T>:
1、IList<T>.ToList()
2、new List(IList<T>)

话说我没找到IList<T>.ToList(),是因为没有加载哪个引用么?

用循环,使用扩展方法,把IList转换成List<T>

public static class Extension//必须先声明一个静态类,类名随意
    {
        /// <summary>
        /// IList转换为List
        /// </summary>
        /// <typeparam name=”T”></typeparam>
        /// <param name=”In”></param>
        /// <returns></returns>
        public static List<T> ToList<T>(this IList In) where T : class //扩建的方法必须是静态方法,参数里面必须含有this关键字,this关键字后面的类型
        {
            List<T> list = new List<T>();
            foreach (var i in In)
            {
                T t = i as T;
                if (t != null)
                {
                    list.Add(t);
                }
            }
            return list;
        }
}

使用时
A与B是主从关系,A中有B的集合属性 IList  Blist;
List<B> data=A.Blist.ToList<B>();

public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable

IList<T>继承了IEnumerable,明显可以使用Linq查询,怎么会没太多方法可用。

if(list is IList<T>){return (List<T>)list;}

如果返回的IList<T>就是List<T>类型,直接强制转换即可,如果不是,那根本就不存在转换,只能构造一个List<T>类型返回。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明IList<T>如何转成List<T>