如何创建将DataRowCollection转换为C#中泛型类型的对象数组的方法?

如何创建将DataRowCollection转换为C#中泛型类型的对象数组的方法?,c#,generics,datarow,C#,Generics,Datarow,我试图创建一个方法,该方法接受DataTable或DataRowCollection并将其转换为泛型类型的数组。大概是这样的: public static T[] ConvertToArray<T>(DataTable dataTable) { List<T> result = new List<T>(); foreach (DataRow dataRow in dataTable.Rows)

我试图创建一个方法,该方法接受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();
    }
无法将System.Data.DataRow转换为T

如果我在不使用泛型类型的情况下执行相同的操作,并确保对象类具有已定义的自定义转换运算符,则代码工作正常


所以现在的问题是,我如何使用泛型来实现这一点?

您可以使用一个对象来提供数据行到您的类型的转换:

public interface IDataRowConverter<T>
{
    T Convert(DataRow row);
}
公共接口IDataRowConverter
{
T转换(数据行);
}
为您的功能提供自定义转换器:

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 static T[]ConvertToArray(DataTable DataTable,IDataRowConverter converter)
{
列表结果=新列表();
foreach(dataTable.Rows中的DataRow-DataRow)
Add(converter.Convert(dataRow));
返回result.ToArray();
}
然后,为所需类型实现接口:

public class MyObjectDataRowConverter : IDataRowConverter<MyObject>
{
    public MyObject Convert(DataRow row)
    {
        MyObject myObject = new MyObject();

        // Initialize object using the row instance

        return myObject;
    }
}
公共类MyObjectDataRowConverter:IDataRowConverter
{
公共MyObject转换(数据行)
{
MyObject MyObject=新的MyObject();
//使用行实例初始化对象
返回myObject;
}
}
然后可以使用以下代码调用函数:

MyObject[] objectArray = 
    ConvertToArray<MyObject>(datatable, new MyObjectDataRowConverter());
MyObject[]对象数组=
ConvertToArray(数据表,新的MyObjectDataRowConverter());

我可以使用我在想要转换的类上定义的隐式转换方法吗?它们看起来是这样的:公共静态隐式操作符Posting(DataRow DataRow){//something that retusn a Posting object}如果要使用泛型实现,则必须在泛型类型上定义要使用的任何操作。在处理泛型实现时,不能在函数中使用运算符,因为.net不允许运算符约束。但是,使用所描述的方法,可以在实现转换器类时使用运算符。
MyObject[] objectArray = 
    ConvertToArray<MyObject>(datatable, new MyObjectDataRowConverter());