我无法转换列表<;object[]>;列出<;T[]>;在C#中

本文关键字:gt lt 列出 object 转换 列表 | 更新日期: 2023-09-27 18:26:54

我有以下最终代码:

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泛型类型数组,但我没有成功。对于前面的代码,我得到了一个运行时错误:对象必须实现IConvertable。当我定义类时,我为泛型类型设置了一个约束:

class Cclass<T>: Iinterface<T> where T:IConvertible
{  
    //body 
}

我愿意接受其他可以实现我将类型转换为泛型数组的目标的建议。非常感谢。

我无法转换列表<;object[]>;列出<;T[]>;在C#中

您可以使用Linq:

  bass = row
    .Select(x => (T)Convert.ChangeType(x, typeof(T)))
    .ToArray();

即使T1可以强制转换为T2,也无法将T1的数组转换为T2的集合。查找http://blogs.msdn.com/b/csharpfaq/archive/2010/02/16/covariance-and-contravariance-faq.aspx.一个更简单的解决方案是遍历行中的每个对象,并分别强制转换它们。