我无法将列表<object []>转换为C#</t []> </object []>中的列表<t []>

时间:2014-10-16 12:07:02

标签: c# object generics typeconverter

我有以下最终代码:

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 
}

我可以接受其他可以实现我转换为通用数组的目标的建议。 谢谢!

2 个答案:

答案 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。一个更简单的解决方案是遍历行中的每个对象并单独转换它们。