我有以下最终代码:
SqlDataReader dataReader;
dataReader = cmd.ExecuteReader();
// var list = new List<string[]>();
List<T[]> list = new List<T[]>();
while (dataReader.Read())
{
// var row = new string[dataReader.FieldCount];
//object[] row new object;
T[] bass;
object[] row = new object[dataReader.FieldCount];
dataReader.GetValues(row);
bass = (T[]) Convert.ChangeType(row,typeof(T[]));
list.Add(bass);
}
我一直试图以不同的方式将对象数组转换为T泛型类型数组,但我没有做到。对于早期的代码,我得到一个运行时错误:对象必须实现IConvertible。 我在定义类时为通用类型设置了约束:
class Cclass<T>: Iinterface<T> where T:IConvertible
{
//body
}
我可以接受其他可以实现我转换为通用数组的目标的建议。 谢谢!
答案 0 :(得分:5)
您可以使用 Linq :
bass = row
.Select(x => (T)Convert.ChangeType(x, typeof(T)))
.ToArray();
答案 1 :(得分:2)
即使T1
可以投放到T2
,也无法将T1
数组转换为T2
的集合。查看http://blogs.msdn.com/b/csharpfaq/archive/2010/02/16/covariance-and-contravariance-faq.aspx。一个更简单的解决方案是遍历行中的每个对象并单独转换它们。