[英]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.