我尝试创建一个构建快速DataTable的方法 我目前的代码是这样的
实施
var table = build("myTableName").col<int>("col1").col<string>("col2")
.row(1, "row1")
.row(2, "row2");
public static DataTable build(string name)
{
return new DataTable(name);
}
public static DataTable col<T>(this DataTable table, string name)
{
table.Columns.Add(colName, typeof(T));
retun table;
}
public static DataTable row(this DataTable table, params object[] objects)
{
DataRow row = table.NewRow();
int i = 0;
objects.ToList().ForEach(obj => row[i++] = obj ?? DBNull.Value);
table.Rows.Add(row);
return table;
}
如果有办法做多种类型的参数,我可以把事情做得更快。
比如
public static col<A,B,C, ...>col(params string[] names){...}
答案 0 :(得分:2)
您可以创建多个类型参数,但是您必须为每个必须支持的列数进行显式重载。
在我看来,这样做并不是一个好主意。 可能使您可以更快地编写这段代码,但我认为阅读起来会困难得多。可读性非常重要 - 代码通常比编写代码更频繁地阅读。
答案 1 :(得分:1)
实现此目的的唯一方法是为每个参数创建一个重载,因此一个col<T>
,一个col<T1, T2>
等等。
.NET框架做同样的事情。例如,出于这个原因,Func<T>
有17个版本。
答案 2 :(得分:1)
由于您只是在另一个方法调用中使用该类型作为参数,因此不会起作用:
public static DataTable cols(this DataTable table, string[] names, Type[] types)
{
for(...)
{
table.Columns.Add(names[i], types[i]);
}
return table;
}
.cols(new string[] {"col1", "col2"}, new Type[] {typeof(int), typeof(string)})
不漂亮,有很多方法可以改进“传递和迭代2个阵列,希望它们的大小相同”,但这是一般的想法。做一些检查,并且可能使用结构来传递数据,应该可以正常工作。
答案 3 :(得分:0)
这应该有效:
public static DataTable col<T1>(this DataTable table, string name1)
{
table.Columns.Add(name1, typeof(T1));
return table;
}
public static DataTable col<T1, T2>(this DataTable table, string name1, string name2)
{
table.Columns.Add(name1, typeof(T1));
table.Columns.Add(name2, typeof(T2));
return table;
}
public static DataTable col<T1, T2, T3>(this DataTable table, string name1, string name2, string name 3)
{
table.Columns.Add(name1, typeof(T1));
table.Columns.Add(name2, typeof(T2));
table.Columns.Add(name3, typeof(T3));
return table;
}
最后:
public static DataTable cols(this DataTable table, Type[] types, string[] names)
{
// ...
}