2010-04-30 6 views
7

Ich habe eine Methode bekam, die eine Liste für einen Datensatz TabelleDynamischer Typ für Liste <T>?

public static List<string> GetListFromDataTable(DataSet dataSet, string tableName, string rowName) 
    { 
     int count = dataSet.Tables[tableName].Rows.Count; 
     List<string> values = new List<string>(); 

     // Loop through the table and row and add them into the array 
     for (int i = 0; i < count; i++) 
     { 
      values.Add(dataSet.Tables[tableName].Rows[i][rowName].ToString()); 
     } 
     return values; 
    } 

Gibt es eine Möglichkeit gibt kann ich dynamisch den Datentyp für die Liste und haben diese ein Verfahren sorgen für alle Datentypen festgelegt, damit ich auf angeben Aufruf dieser Methode, dass es eine List<int> oder List<string> oder List<AnythingILike> sein sollte?

Auch was wäre der Rückgabetyp bei der Erklärung der Methode?

Vielen Dank im Voraus, Brett

Antwort

11

Machen Sie Ihre Methode generic:

public static List<T> GetListFromDataTable<T>(DataSet dataSet, string tableName, string rowName) 
{ 
    // Find out how many rows are in your table and create an aray of that length 
    int count = dataSet.Tables[tableName].Rows.Count; 
    List<T> values = new List<T>(); 

    // Loop through the table and row and add them into the array 
    for (int i = 0; i < count; i++) 
    { 
     values.Add((T)dataSet.Tables[tableName].Rows[i][rowName]); 
    } 
    return values; 
} 

Dann es zu nennen:

List<string> test1 = GetListFromDataTable<string>(dataSet, tableName, rowName); 
List<int> test2 = GetListFromDataTable<int>(dataSet, tableName, rowName); 
List<Guid> test3 = GetListFromDataTable<Guid>(dataSet, tableName, rowName); 
+0

Zu einfach, danke! – Brett

3

Eine generische Version des Codes:

public List<T> GetListFromTable<T>(DataTable table, string colName) 
{ 
    var list = new List<T>(); 
    foreach (DataRow row in table) 
    { 
     list.Add((T)row[colName]); 
    } 
    return list; 
} 

public List<T> GetListFromDataTable<T>(DataSet ds, string tableName) 
{ 
    return GetListFromTable(ds.Tables[tableName]); 
} 

Wenn Sie nur eine Folge von Werten benötigen, können Sie die Erstellung der temporären Tabelle vermeiden und einen Enumerator verwenden:

Verwandte Themen