繁体   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