我正在尝试获取数据表中一列(尤其是第一列)的最大值,这是我的代码:
TableData tableData = ReadTableData(Body.GetEx<string>(JsonKeys.Engine_O2Map), "O2Map");
double max_enginespeed_fc;
max_enginespeed_fc = FuelConsumptionMap.Compute(
("MAX([" + (FuelConsumptionMap.Columns[0].ColumnName + "])")), "");
foreach (System.Data.DataRow row in tableData.Rows)
{
row[0] = 0;
}
return tableData;
但是我遇到以下错误:
错误CS0266无法将类型'object'隐式转换为'double'。存在显式转换(您是否缺少演员表?)
FuelConsumption Map是程序中存在的另一个数据表。
问题出在max_enginespeed_fc
上。
该如何纠正?
在此先感谢您提供的帮助。
答案 0 :(得分:0)
DataTable.Compute方法返回一个 object ,您必须在使用前将其强制转换为正确的类型。
该错误说明了问题所在。但是,代码的编写方式很难理解是哪个语句导致的。
double max_enginespeed_fc;
max_enginespeed_fc = FuelConsumptionMap.Compute(
("MAX([" + (FuelConsumptionMap.Columns[0].ColumnName + "])")), "");
应改写为:
var column = FuelConsumptionMap.Columns[0].ColumnName;
var expression=String.Format("MAX([{0}])",column);
double max_enginespeed_fc;
max_enginespeed_fc = FuelConsumptionMap.Compute(expression, "");
这将清楚表明问题在于Compute
的返回值。要获得double
作为结果,需要进行一次强制转换:
var column = FuelConsumptionMap.Columns[0].ColumnName;
var expression=String.Format("MAX([{0}])",column);
var max_enginespeed_fc = (double)FuelConsumptionMap.Compute(expression, "");
使用字符串插值可以变成:
var column = FuelConsumptionMap.Columns[0].ColumnName;
var expression=$"MAX([{column}])";
var max_enginespeed_fc = (double)FuelConsumptionMap.Compute(expression, "");
甚至
var column = FuelConsumptionMap.Columns[0].ColumnName;
var max_enginespeed_fc = (double)FuelConsumptionMap.Compute($"MAX([{column}])", "");