如何创建一个方法,其转换DataRowCollection在C#泛型类型的对象的数组?
题
我试图创建采用一个数据表或一个DataRowCollection并将其转换为一个通用类型的阵列的方法。是这样的:
public static T[] ConvertToArray<T>(DataTable dataTable)
{
List<T> result = new List<T>();
foreach (DataRow dataRow in dataTable.Rows)
result.Add((T)dataRow);
return result.ToArray();
}
问题是这样的线
result.Add((T)dataRow);
其给出不能转换的System.Data.DataRow至T
如果我做同样的事情,而不使用泛型类型,并确保该类的对象有一个定义的自定义转换操作符,代码工作正常。
所以,现在的问题是,我怎么拉这个使用泛型的?
解决方案
您可以使用提供关于一个DataRow转化为您的类型的对象:
public interface IDataRowConverter<T>
{
T Convert(DataRow row);
}
提供定制转换器给你的函数:
public static T[] ConvertToArray<T>(DataTable dataTable, IDataRowConverter<T> converter)
{
List<T> result = new List<T>();
foreach (DataRow dataRow in dataTable.Rows)
result.Add(converter.Convert(dataRow));
return result.ToArray();
}
然后,实现该接口为您的所需类型:
public class MyObjectDataRowConverter : IDataRowConverter<MyObject>
{
public MyObject Convert(DataRow row)
{
MyObject myObject = new MyObject();
// Initialize object using the row instance
return myObject;
}
}
您可以再使用此代码调用你的函数:
MyObject[] objectArray =
ConvertToArray<MyObject>(datatable, new MyObjectDataRowConverter());
不隶属于 StackOverflow