首页 > 解决方案 > 将具有显式转换的对象转换为泛型方法类型 T

问题描述

我有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。如果我要实现它,我猜我需要实现很多方法。

标签: c#type-conversion

解决方案


如果您不想实现完整的 IConvertible 接口,那么仅对您拥有的少数实例进行类型模式匹配可能是有意义的:

switch (expected)
{
    case Double dbl: return dbl == (Double)aClass;
    ...
}

推荐阅读