4

我正在尝试创建一个方法,该方法采用 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。

如果我在不使用泛型类型的情况下做同样的事情,并确保对象的类具有定义的自定义转换运算符,则代码可以正常工作。

所以现在的问题是,我如何使用泛型?

4

1 回答 1

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());
于 2010-05-11T09:27:02.680 回答