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

StackOverflow https://stackoverflow.com/questions/2809419

  •  25-09-2019
  •  | 
  •  

我试图创建采用一个数据表或一个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());
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top