在线等:如何把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 运算符操作:
--------------------编程问答-------------------- as 可能会有错误,因为 T 可能为 struct,两种解决方法:
T obj = pd(dr) as T;
if (obj != null)
{
lst.Add(pd(dr));
}
else
{
// 转换失败,应该抛异常
throw new YourException(...);
}
// 其它操作
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#