У меня есть метод, который возвращает Список для таблицы 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
Сделайте свой метод универсальным:
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);
Общая версия вашего кода:
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"]);
}
}