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