2010-11-01 71 views
2

我試着創建一個方法來構建快速DataTable 我現在的代碼是這樣的有沒有辦法做> public void test <A,B,C,....,Z>(...)

實施

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){...} 
+1

爲什麼給這個-1?這是一個很好的問題,+1。 – 2010-11-01 18:01:41

回答

1

來完成,這是通過創造的參數的每個數字的過載的唯一方式,所以一個col<T>,一個col<T1, T2>等等。

.NET框架做同樣的事情。例如,Func<T>就有17個版本。

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) 
{ 
    // ... 
} 
2

您可從多個類型的參數,但你將不得不作出一個明確的過載,你必須支撐柱的每個號碼。

在我看來,這樣做不是好主意。它可能可能使您能夠編寫此代碼幾分之一秒更快,但我認爲這將是更難以閱讀。可讀性非常重要 - 代碼的讀取次數通常比寫入的次數要多。

+0

謝謝。我用這個評論很多。我的同事用我的話說我很難讀。但對我來說,我認爲指定col <>()和row()比常規方法更可讀。因爲代碼要短得多,所以它更加不易處理......但我的同事並不完全同意我:) – Bonshington 2010-11-02 06:35:13

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個陣列,希望他們是相同的大小「,但這是一般的想法。做一些檢查,也許使用一個結構來傳遞你的數據,應該解決好。

相關問題