我目前有一个通用方法,它根据键从数据库中读取值并返回该值的特定类型。
public T Get<T>(string key, T defaultValue)
{
var myparms = new List<SqlParameter>
{
new SqlParameter("@KEY", key),
};
const string getPropertyQuery = "SELECT SPARM_VALUE FROM SYSPARAMS WHERE SPARM_KEY = @KEY;";
var returnedValue = //Get value from Database
if (returnedValue == null)
{
return defaultValue; //Value does not exists so return default.
}
return (T)Convert.ChangeType(returnedValue, typeof(T));
}
但是当我尝试返回一个 TimeSpan 类型时,我得到了以下异常。 从“System.String”到“System.TimeSpan”的转换无效。
经过一番谷歌搜索后,我发现最常见的解决方案是使用 TimeSpan.Parse
或 TimeSpan.TryParse
方法。
我还找到了TimeSpan结构。
public struct TimeSpan : IComparable, IComparable,
IEquatable、IFormattable
我的问题是为什么,为什么 TimeSpan 不能做到这一点。是不是因为没有IConvertible
接口(interface)?对此有任何想法将不胜感激。
最佳答案
我不认为 Convert.ChangeType
是您真正想要的。试试 TypeConverter.ConvertFrom
:
var converter = TypeDescriptor.GetConverter(typeof(T));
return converter.CanConvertFrom(returnedValue) ?
(T)converter.ConvertFrom(returnedValue) :
defaultValue;
关于c# - 从 'System.String' 到 'System.TimeSpan' 的转换无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7039072/