Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换为泛型类型_C# - Fatal编程技术网

C# 转换为泛型类型

C# 转换为泛型类型,c#,C#,我在C#中有以下属性: 没有从int到TimeSpan的隐式转换,因此第一个代码列表在运行时导致InvalidCastException。 在getter中是否有将int转换为TimeSpan的变通方法,或者最好找到另一种实现方式?作为变通方法,您可以将TimeSpan.fromses转换为对象,然后转换为T(具有相应的性能命中): get { 如果(类型(T)=类型(时间跨度)) 返回(T)(对象)TimeSpan.FromSeconds(ClassImNotAllowedToChange.G

我在C#中有以下属性:

没有从
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>();
}