我需要有效的扩展方法来获得DataRow作为列表

本文关键字:DataRow 列表 double 有效 扩展 方法 | 更新日期: 2023-09-27 18:11:53

我需要扩展DataRow的方法,返回双精度值列表。

我假设我的DataRow只包含双数据类型。

我试过这样做:

public static List<double> ToListOfDouble(this DataRow datarow)
{
    List<double> retList = new List<double>();
    foreach (object val in datarow) // error here
    {
        retList.Add((double)val);
    }
    return retList;
}

but I have error:

foreach语句不能对类型的变量进行操作"System.Data。DataRow'因为'System.Data。DataRow'不包含GetEnumerator的公共定义

我需要有效的扩展方法来获得DataRow作为列表<double>

一个简单的选项:

return datarow.ItemArray.Cast<double>().ToList();

这可能涉及到不必要的拷贝。在数据复制方面更有效,但在验证等方面可能效率较低:

int count = row.Table.Columns.Count;
var ret = new List<double>(count);
for (int i = 0; i < count; i++)
{
    ret.Add((double) datarow[i]);
}
return ret;

如果你认为这对你的应用很重要,你应该对这两个选项进行基准测试,以检查它们的性能。

DataRow。ItemArray是你想要迭代的属性(而不是datarow本身)。