[英]Conversion to generic type
我在 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
。 是否有任何解决方法可以在getter
中将int
转换为TimeSpan
或者最好找到另一种实现方式?
作为解决方法,您可以将TimeSpan.FromSeconds
转换为object
,然后转换为T
(具有相应的性能影响):
get
{
if (typeof(T) == typeof(TimeSpan))
return (T)(object)TimeSpan.FromSeconds(ClassImNotAllowedToChange.GetValue<int>());
return PlcItem.GetValue<T>();
}
但我会建议以某种方式重新编写您的代码,这样您就不需要这样做了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.