我正在尝试创建一个采用DataTable或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。
如果我在不使用泛型类型的情况下执行相同的操作,并确保对象的类具有已定义的自定义转换运算符,则代码可以正常工作。
现在问题是,如何使用泛型?
答案 0 :(得分:4)
您可以使用将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());