【问题标题】:Bridge method with a generic interface to a number of overloaded methods具有到许多重载方法的通用接口的桥接方法
【发布时间】:2014-07-17 09:08:54
【问题描述】:

在我的代码中,我正在进行从一种类型层次结构到另一种类型的转换。我有一组重载方法:

Type1 ToInternalObject(OtherType1 obj);
Type2 ToInternalObject(OtherType2 obj);
//etc.

为了更容易使用这些方法,我想创建一个通用接口:T ToInternalObject<T>(BaseOtherType obj),但是当类型为 double 时,我已经陷入困境:

    public static T ToInternalObject<T>(object obj)
    {
        if (typeof (T) == typeof (double))
        {
            return (T) 5.0;
        }
        throw new Exception("Type is not handled yet");
    }

编译错误为:Error 140 Cannot convert type 'double' to 'T'。我怎样才能让它工作?

【问题讨论】:

    标签: c# .net generics casting


    【解决方案1】:

    双重转换应该可以工作:

    return (T) (object) 5.0;
    

    【讨论】:

    • 确实如此。您能否详细说明一下并解释原因?
    • @Grzenio 因为 T 可以是任何类型,编译器不允许直接强制转换,你可以使用双重强制转换来破解它,因为 object 是所有类型的基类,当你转换值时5.0 到对象(顺便说一句,它被装箱),该类型被视为对象,因此您可以将其转换为您想要的任何类型。但是如果进行转换,它当然会抛出一个无效的转换异常在运行时不可能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多