簡體   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