我在C#中具有以下属性:
public T Value
{
get
{
ClassImNotAllowedToChange.GetValue<T>();
}
set
{
ClassImNotAllowedToChange.SetValue<T>(value);
}
}
由于某些原因,我无法更改的实现ClassImNotAllowedToChange
,这可能会对我的代码部分施加一些限制。这里的问题是我想保存并读取TimeSpan
为秒数,转换为int
。尽管我可以轻松编写任何内容setter
,但getter
限制了我只能使用泛型类型T
,这使得这样的事情变得不可能:
get
{
if (typeof(T) == typeof(TimeSpan))
return (T)TimeSpan.FromSeconds(ClassImNotAllowedToChange.GetValue<int>());
return PlcItem.GetValue<T>();
}
没有从int
到的隐式转换TimeSpan
,因此第一个代码清单导致InvalidCastException
in in runtime。是否有任何变通办法可以转换int
到TimeSpan
内部,getter
还是最好找到另一种实现方式?
作为解决方法,您可以先投射然后再投射TimeSpan.FromSeconds
到(具有相应的性能指标):object
T
get
{
if (typeof(T) == typeof(TimeSpan))
return (T)(object)TimeSpan.FromSeconds(ClassImNotAllowedToChange.GetValue<int>());
return PlcItem.GetValue<T>();
}
但是我建议您以某种方式对您的代码进行重做,因此您无需这样做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句