繁体   English   中英

转换为泛型

[英]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>();
}

没有从intTimeSpan的隐式转换,因此第一个代码清单会在运行时导致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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM