我无法转换列表<;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
}
我愿意接受其他可以实现我将类型转换为泛型数组的目标的建议。非常感谢。
您可以使用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.一个更简单的解决方案是遍历行中的每个对象,并分别强制转换它们。