簡體   English   中英

DataTable擴展方法C#

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM