C# 转换为泛型类型
我在C#中有以下属性: 没有从C# 转换为泛型类型,c#,C#,我在C#中有以下属性: 没有从int到TimeSpan的隐式转换,因此第一个代码列表在运行时导致InvalidCastException。 在getter中是否有将int转换为TimeSpan的变通方法,或者最好找到另一种实现方式?作为变通方法,您可以将TimeSpan.fromses转换为对象,然后转换为T(具有相应的性能命中): get { 如果(类型(T)=类型(时间跨度)) 返回(T)(对象)TimeSpan.FromSeconds(ClassImNotAllowedToChange.G
int
到TimeSpan
的隐式转换,因此第一个代码列表在运行时导致InvalidCastException
。
在
getter
中是否有将int
转换为TimeSpan
的变通方法,或者最好找到另一种实现方式?作为变通方法,您可以将TimeSpan.fromses
转换为对象,然后转换为T
(具有相应的性能命中):
get
{
如果(类型(T)=类型(时间跨度))
返回(T)(对象)TimeSpan.FromSeconds(ClassImNotAllowedToChange.GetValue());
返回PlcItem.GetValue();
}
但是我建议您以某种方式重新编写代码,这样您就不需要这样做了。您能告诉我们您最初的尝试吗?这个解决方法是针对编译时的,不是吗?OP说“在运行时”。@Sinatr据我所知OP有运行时解决方案-它是TimeSpan.FromSeconds(ClassImNotAllowedToChange.GetValue())
我对你的意思有点困惑TimeSpan.FromSeconds(ClassImNotAllowedToChange.GetValue())
会导致编译时异常,而这个答案不会。@ArliChokoev我的意思是,我假设您已经有了在运行时将int
转换为TimeSpan
的所需行为(我在注释中提到的代码),您需要一个行为来进行编译。
public T Value
{
get
{
ClassImNotAllowedToChange.GetValue<T>();
}
set
{
ClassImNotAllowedToChange.SetValue<T>(value);
}
}
get
{
if (typeof(T) == typeof(TimeSpan))
return (T)TimeSpan.FromSeconds(ClassImNotAllowedToChange.GetValue<int>());
return PlcItem.GetValue<T>();
}
get
{
if (typeof(T) == typeof(TimeSpan))
return (T)(object)TimeSpan.FromSeconds(ClassImNotAllowedToChange.GetValue<int>());
return PlcItem.GetValue<T>();
}