我有一个在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。
答案 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)