gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:27:26 25 4
gpt4 key购买 nike

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

这给出了 Cannot convert System.Data.DataRow to 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();
}

然后,为您需要的类型实现接口(interface):

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

关于c# - 如何在 C# 中创建将 DataRowCollection 转换为泛型对象数组的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2809419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com