用过NHibernate和MyBatis.Net的人知道,查询数据库返回的结果集经常是IList<T>类型的,如何才能转成List<T>呢?
18 个解决方案
#1
转换不了,至少不一定能转换,比如
class MyClass<T> : Ilist<T>
{
...
}
你能把MyClass<T>转换成List<T>么?
当然,Linq为IEnumerable<T>实现了List<T> ToList()扩展方法
你可以用 mylist.ToList() 去“转换”,但是这其实是创建了一个新的List,并且复制了元素。
class MyClass<T> : Ilist<T>
{
...
}
你能把MyClass<T>转换成List<T>么?
当然,Linq为IEnumerable<T>实现了List<T> ToList()扩展方法
你可以用 mylist.ToList() 去“转换”,但是这其实是创建了一个新的List,并且复制了元素。
#2
IList<T> ilist=newList<T>();
#3
IList<T> ilist=new List<T>();
#4
IList<int> s=...
var b= s as List<int> ?? new List<int>(s);
var b= s as List<int> ?? new List<int>(s);
#5
IList<T> ilist=new List<T>();
#6
别考虑转换了,在需要处理数据的时候,ToList()吧。。。。
#7
public List<T> IListToList<T>(IList<T> list) {
T [] array = new T[list.Count];
list.CopyTo(array,0);
return new List<T>(array);
}
#8
你那还是转换么?不就是IList<T>.ToList()么。。。。
#9
4楼神人啊,看样子随手写的都没经过测试
我测试2种都通过了
就是不知道效率怎么样
我测试2种都通过了
就是不知道效率怎么样
#10
脱裤子放屁,典型的。使用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);
#11
wddw1986 莫要人身攻击啊
不过你说的我看不大懂
你是说IEnumerable的扩展方法能直接转的吗?
List<T>的构造函数能说详细些吗
不过你说的我看不大懂
你是说IEnumerable的扩展方法能直接转的吗?
List<T>的构造函数能说详细些吗
#12
List<T> list=(List<T>)ilist;
#13
难道是List<T> b = new List<T>(IList);
#14
简单点说,IList<T>直接转换为List<T>可以不用考虑。
IList<T>可以用至少2种方式简单的 复制成List<T>:
1、IList<T>.ToList()
2、new List(IList<T>)
#15
不好意思
2、new List<T>(IList<T>)
2、new List<T>(IList<T>)
#16
话说我没找到IList<T>.ToList(),是因为没有加载哪个引用么?
#17
用循环,使用扩展方法,把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 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>();
#18
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>类型返回。
#1
转换不了,至少不一定能转换,比如
class MyClass<T> : Ilist<T>
{
...
}
你能把MyClass<T>转换成List<T>么?
当然,Linq为IEnumerable<T>实现了List<T> ToList()扩展方法
你可以用 mylist.ToList() 去“转换”,但是这其实是创建了一个新的List,并且复制了元素。
class MyClass<T> : Ilist<T>
{
...
}
你能把MyClass<T>转换成List<T>么?
当然,Linq为IEnumerable<T>实现了List<T> ToList()扩展方法
你可以用 mylist.ToList() 去“转换”,但是这其实是创建了一个新的List,并且复制了元素。
#2
IList<T> ilist=newList<T>();
#3
IList<T> ilist=new List<T>();
#4
IList<int> s=...
var b= s as List<int> ?? new List<int>(s);
var b= s as List<int> ?? new List<int>(s);
#5
IList<T> ilist=new List<T>();
#6
别考虑转换了,在需要处理数据的时候,ToList()吧。。。。
#7
public List<T> IListToList<T>(IList<T> list) {
T [] array = new T[list.Count];
list.CopyTo(array,0);
return new List<T>(array);
}
#8
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()么。。。。
#9
4楼神人啊,看样子随手写的都没经过测试
我测试2种都通过了
就是不知道效率怎么样
我测试2种都通过了
就是不知道效率怎么样
#10
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);
#11
wddw1986 莫要人身攻击啊
不过你说的我看不大懂
你是说IEnumerable的扩展方法能直接转的吗?
List<T>的构造函数能说详细些吗
不过你说的我看不大懂
你是说IEnumerable的扩展方法能直接转的吗?
List<T>的构造函数能说详细些吗
#12
List<T> list=(List<T>)ilist;
#13
难道是List<T> b = new List<T>(IList);
#14
wddw1986 莫要人身攻击啊
不过你说的我看不大懂
你是说IEnumerable的扩展方法能直接转的吗?
List<T>的构造函数能说详细些吗
简单点说,IList<T>直接转换为List<T>可以不用考虑。
IList<T>可以用至少2种方式简单的 复制成List<T>:
1、IList<T>.ToList()
2、new List(IList<T>)
#15
不好意思
2、new List<T>(IList<T>)
2、new List<T>(IList<T>)
#16
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(),是因为没有加载哪个引用么?
#17
用循环,使用扩展方法,把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 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>();
#18
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>类型返回。