Динамический тип для Списка <T>?

У меня есть метод, который возвращает Список для таблицы DataSet

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

Есть ли способ, которым я могу динамично установить тип данных для списка и иметь этот метод, обслуживают все типы данных, таким образом, я могу указать по вызову этого метода, что это должен быть a List<int> или List<string> или List<AnythingILike>?

Кроме того, что возврат ввел бы быть при объявлении метода?

Заранее спасибо, Brett

7
задан Sumon Banerjee 17 February 2014 в 13:21
поделиться

2 ответа

Сделайте свой метод универсальным:

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

Затем вызовите его:

List<string> test1 = GetListFromDataTable<string>(dataSet, tableName, rowName);
List<int> test2 = GetListFromDataTable<int>(dataSet, tableName, rowName);
List<Guid> test3 = GetListFromDataTable<Guid>(dataSet, tableName, rowName);
12
ответ дан 6 December 2019 в 14:01
поделиться

Общая версия вашего кода:

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

Если вам просто нужна последовательность значений, вы можете избегайте создания временной таблицы и используйте перечислитель:

public IEnumerable<T> GetSequenceFromTable<T>(DataTable table, string colName)
{
    foreach (DataRow row in table)
    {
        yield return (T)(row["colName"]);
    }
}
3
ответ дан 6 December 2019 в 14:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: