我想为 System.Data.DataRow[] 创建一个扩展方法,它将从 DataRow[] 中获取单个列并将其转换为列数据类型的列表、数组等。
最初我把它作为一个字符串扩展,可以生成一个字符串数组,但想探索一个针对不同数据类型的更通用的解决方案。
字符串解决方案如下..
public static string[] ExtractColumn(this DataRow[] DataRows, string Column)
{
if (DataRows.Count() == 0) { return null; }
string[] returnString = new string[DataRows.Count()];
int i = 0;
foreach (DataRow r in DataRows ?? new DataRow[0])
{
returnString[i] = r[Column].ToString();
i++;
}
return returnString;
}
当我开始制定一种更通用的方法时,我陷入了构建 T 的列表,其中 T 是 DataColumn 的类型。
public static List<T> ColumnToArray<T>(this DataRow[] DataRows, string Column)
{
List<T> list = new List<T>();
if (DataRows.Count() == 0) { return null; }
foreach (DataRow r in DataRows ?? new DataRow[0])
{
list.Add(r[Column]); //<-- Does not compile
}
return list;
}
我试图像这样制作一个本地列表:
List<DataRows[0][Column].GetType()> list = new List<DataRows[0][Column].GetType()>();
但这不会编译。
所以我的问题是:
- 有可能用泛型做我正在尝试的事情吗?
- 是否有替代/预先存在的扩展方法来实现这一目标?
- 你会怎么做?