作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个方法可以确定 DataTable
中列的最小值和最大值:
public void GetMinMaxRange( DataTable data, string valueColumnName )
{
var min = data.AsEnumerable().Min(m => m.Field<double>(valueColumnName));
var max = data.AsEnumerable().Max(m => m.Field<double>(valueColumnName));
}
我想将其重构为:
public void GetMinMaxRange( DataTable data, string valueColumnName )
{
DataColumn column = data.Columns[valueColumnName];
var min = data.AsEnumerable().Min(m => m.Field<column.DataType>(valueColumnName));
var max = data.AsEnumerable().Max(m => m.Field<column.DataType>(valueColumnName));
}
我需要确定数据类型并使用它而不是硬编码 m.Field<double>
.如何做到这一点?
更新至于为什么我要计算最小值和最大值的差值
public static double/decimal/int GetMinMaxRange<T>(DataTable data,
string valueColumnName) where T : IComparable<T>
{
DataColumn column = data.Columns[valueColumnName];
var min = data.AsEnumerable().Min(m => m.Field<T>(valueColumnName));
var max = data.AsEnumerable().Max(m => m.Field<T>(valueColumnName)); ;
return max - min;
}
最佳答案
简单地将其创建为通用应该可行:
public void GetMinMaxRange<T>( DataTable data, string valueColumnName )
where T : IComparable<T>
{
DataColumn column = data.Columns[valueColumnName];
var min = data.AsEnumerable().Min(m => m.Field<T>(valueColumnName));
var max = data.AsEnumerable().Max(m => m.Field<T>(valueColumnName));
}
然后您将用作:
GetMinMaxRange<MyType>(dataTable, valueColumnName);
关于c# - 如何将 Field<T> 与类型一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7390835/
我是一名优秀的程序员,十分优秀!