2017-08-18 1 views
-1

Ich habe eine Methode, um die Operation in Datatable durchzuführen.DataTable Erweiterungsmethoden C#

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; 
    } 

Um diese Methode greife ich auf ähnliche

dt = SetColumnsOrder(dt,colNames); 

tun müssen, statt wie dies zu tun, wie Sie eine Funktion erstellen Sie es wie unten in C# nennen

dt.SetColumnOrder(colNames); 

wo Die Funktion sollte dt als Eingabe nehmen, um Operationen auszuführen und in demselben dt zu speichern.

+0

Sie ordnen das Objekt 'DataTable' im obigen Code zu, es sieht so aus, als ob Sie dem 'DataTable' Objekt eine Funktion zuweisen und es' 'aufrufen wollen SetColumnOrder' Funktion? – escapesequence

+1

während dies nicht genau ein Duplikat von Fragen wie [this] (https://stackoverflow.com/questions/20406902/how-to-write-an- extension-method-for-datatable-rowsij) ist, gibt es wenig Verdienst Hinzufügen von 3 + Antworten zu dieser Frage; es fragt nach einem gemeinsamen [Merkmal der Sprache] (https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/extension-methods). – dlatikay

Antwort

0

Ihre Unterschrift Ändern von

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

zu

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

Vergessen Sie nicht, die Methode 'static' zu verwenden. – wablab

1

Zunächst einmal müssen Sie nicht die gleiche Datatable zurück, die Sie in übergeben Sie Ihre Methodensignatur ändern könnte.:

public void SetColumnsOrder(DataTable table, String[] columnNames) 

und entfernen sie die return, und es wäre immer noch die gleiche Arbeit (natürlich Sie würden es wie SetColumnsOrder(dt,colNames); anstelle von dt = SetColumnsOrder(dt,colNames); nennen. Und Sie sollten tun, weil es weniger verwirrendes Design ist.

Dann wird, um es als eine Erweiterung Methode zu nennen, nur die Unterschrift wieder zu ändern, zu:

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

Und jetzt können Sie es wie dt.SetColumnOrder(colNames); verwenden.

1

Sie benötigen würde eine Erweiterungsmethode wie so verwenden:

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; 
    } 
} 

Verwendung wäre:

dt.SetColumnsOrder(columnNames); 

Und da Sie die Datentabelle sind modifizieren, die ein Referenztyp ist. Sie können void als Rückgabetyp verwenden und einfach auf die sortierte dt Variable zugreifen