当前位置:编程学习 > C#/ASP.NET >>

在线等:如何把object 转换为 List<T> 类型

委托文件的代码:
          public delegate object PopulateDelegate(IDataReader dr);
    
在另一个类中有如下报错函数:
private List<T> GetRecordList<T>(PopulateDelegate pd, QueryParam pp, out int RecordCount)
    {
        List<T> lst = new List<T>();
        SqlDataReader dr = cmd.ExecuteReader();
          lst.Add(pd(dr));//此处报错,类型转换问题。pd这个委托的类型是object,不想改委托,如何把pd(dr)的类型转化为List<T>啊,求高手 --------------------编程问答-------------------- 因为 PopulateDelegate 返回的是 object,List<T> 的元素类型是 T,而编译器不知道 T 是不是 object,如果不是,那一定是她的子类,父类对象不可直接传给子类形参。可以用 as 运算符操作:

T obj = pd(dr) as T;
if (obj != null)
{
    lst.Add(pd(dr));
}
else
{
    // 转换失败,应该抛异常
    throw new YourException(...);
}

// 其它操作
--------------------编程问答-------------------- as 可能会有错误,因为 T 可能为 struct,两种解决方法:
1. 可以强制类型转换:(T)pd(dr)。然后用 try catch 包起来
2. 可以给 T 约束:where T : class


private List<T> GetRecordList<T>(PopulateDelegate pd, SqlParameter pp, out int RecordCount) where T : class
{
    List<T> lst = new List<T>();
    SqlCommand cmd = new SqlCommand();
    SqlDataReader dr = cmd.ExecuteReader();
    T obj = pd(dr) as T;
    lst.Add(obj);
}
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,