【发布时间】:2019-06-11 13:51:42
【问题描述】:
我有 AClass,其中包含方法形式的显式转换:
public static explicit operator Double(AClass x)
对于所有原始类型:int、string等。类不实现IConvertible接口。
在此限制之上,我正在制作具有以下签名的通用方法:
private void VerifyBla<T>(string abc, T expected)
AClass 基本上是围绕原始类型的包装器,在这种方法中,我想将 AClass 转换为 T 并验证它的值。
我尝试过使用:
(T)aClass
但智能感知:无法将类型“AClass”转换为 T。
是否有任何变通方法来解决这个问题,只需对 AClass 进行最小更改或不更改?
我尝试过使用:
(T)Convert.ChangeType(myobject, typeof(T));
但它失败了,因为 AClass 没有实现 IConvertible。如果我要实现它,我猜我需要实现很多方法。
【问题讨论】:
-
您的包装器是否包含 T 类型的值字段?
-
"AClass 没有实现 IConvertible。如果我要实现它,我猜我需要实现很多方法。" -- 是的,但是您已经完成了弄清楚如何将
AClass的实例转换为不同类型的“艰苦”工作。所以你基本上只是从接口方法中调用这些静态运算符。这听起来像是实现IConvertible的主要示例。 -
由于
T没有通用约束,它可以是任何东西,包括MyClass。当然,您不能将AClass转换为MyClass,因为它们没有任何共同的继承关系。 -
从技术上讲,
(T)(dynamic)aClass应该可以工作(请参阅stackoverflow.com/q/16395840/87698),但这并不漂亮。
标签: c# type-conversion