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

时间:2010-05-11 09:23:06

标签: c# generics datarow

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

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

现在问题是,如何使用泛型?

1 个答案:

答案 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());