如何将值转换为作为参数传递的类型
本文关键字:参数传递 类型 转换 | 更新日期: 2023-09-27 18:35:51
我有一个函数可以执行聚合函数(ie. COUNT(),MIN(), MAX())
有时我想回来int, double, date, datetime....
我在尝试转换返回值时遇到问题
以下行给了我一个错误value = Convert.ChangeType(vv, typeof(T) );
这是错误
不能将类型"对象"隐式转换为"T"。存在显式转换(您是否缺少强制转换?
这是我的方法
public T getValue<T>(string query, List<MySqlParameter> pars)
{
T value;
using (var conn = new MySqlConnection(conn_string))
using (var cmd = new MySqlCommand(query, conn))
{
if (pars != null)
{
foreach (MySqlParameter p in pars)
{
cmd.Parameters.Add(p);
}
}
conn.Open();
try
{
object vv = (T)cmd.ExecuteScalar();
if (vv != null)
{
value = Convert.ChangeType(vv, typeof(T) );
}
} catch(Exception ex){
Common.Alert(ex.ToString(), "SQL Error");
value = default(T);
} finally {
conn.Close();
}
}
return value;
}
当我使用这种方法时,我使用这个
int cnt = db.getValue<int>(query, params);
你的代码没有多大意义。首先你投射到 T
,然后如果它不为 null,你把它转换为 T
?转换是没有用的。我认为值得指出的是,您遇到的特定错误("无法隐式将类型'对象'转换为'T'")是因为Convert.ChangeType
返回一个object
,因此通常在调用后立即强制转换:
value = (T)Convert.ChangeType(v, typeof(T));
在您的情况下,您可能需要执行以下操作:
object rawValue = cmd.ExecuteScalar();
value = (T)Convert.ChangeType(rawValue, typeof(T));
请注意,如果rawValue
是null
并且T
是值类型(struct
,例如 int
),此(部分)代码将引发异常。这可能比默默地让值default(T)
要好。