[英]DataTable Extension methods C#
我有一種方法可以在Datatable中執行操作。
public DataTable SetColumnsOrder(DataTable table, String[] columnNames)
{
int columnIndex = 0;
foreach (var columnName in columnNames)
{
if (table.Columns.Contains(columnName))
{
table.Columns[columnName].SetOrdinal(columnIndex);
columnIndex++;
}
} return table;
}
要訪問此方法,我需要這樣做
dt = SetColumnsOrder(dt,colNames);
而不是這樣做,而是如何在c#中創建一個函數來像下面這樣調用它
dt.SetColumnOrder(colNames);
該函數應以dt作為輸入來執行操作並將其存儲回同一dt中。
您將需要使用如下擴展方法:
public static class DataTableExtensions
{
public static DataTable SetColumnsOrder(this DataTable table, string[] columnNames)
{
int columnIndex = 0;
foreach (var columnName in columnNames)
{
if (table.Columns.Contains(columnName))
{
table.Columns[columnName].SetOrdinal(columnIndex);
columnIndex++;
}
}
return table;
}
}
用法是:
dt.SetColumnsOrder(columnNames);
並且由於您正在修改DataTable,它是一種引用類型。 您可以使用void作為返回類型,只需訪問已排序的dt
變量
首先,您不需要返回傳遞的同一數據表。您可以將方法簽名更改為:
public void SetColumnsOrder(DataTable table, String[] columnNames)
並刪除return
,它仍然可以正常工作(很顯然,您將其命名為SetColumnsOrder(dt,colNames);
而不是dt = SetColumnsOrder(dt,colNames);
您應該這樣做,因為它不易混淆設計。
然后,為了將其作為擴展方法進行調用,只需再次將簽名更改為:
public static void SetColumnsOrder(this DataTable table, String[] columnNames)
現在,您可以像dt.SetColumnOrder(colNames);
一樣使用它dt.SetColumnOrder(colNames);
。
從更改您的簽名
public DataTable SetColumnsOrder(DataTable table, String[] columnNames)
至
public static DataTable SetColumnsOrder(this DataTable table, String[] columnNames)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.