DataTable扩展方法C#

时间:2017-08-18 15:46:33

标签: 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。

3 个答案:

答案 0 :(得分:1)

首先,您不需要返回传入的相同DataTable。您可以将方法签名更改为:

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);一样使用它。

答案 1 :(得分:1)

您需要使用类似的扩展方法:

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变量

答案 2 :(得分:0)

更改您的签名
public DataTable SetColumnsOrder(DataTable table, String[] columnNames)

public static DataTable SetColumnsOrder(this DataTable table, String[] columnNames)