如题,我有一个结构体,类似这样:
public struct AInt
{
private int _a;
public int ToInt()
{
reurn _a;
}
public static implicit operator int(AInt value)
{
return value.ToInt();
}
public static implicit operator AInt(int value)
{
_a = value;
}
}
然后在其他类中进行强制转换时报错,代码类似这样:
private void Test(object param)
{
//param is AInt.
int b = param; //这样子编译的时候会报错,提示缺少类型转换.
int b = (int) param; //这样子运行的时候会报错: cannot cast from source type to destination type.
}
如上的Test函数中必须要接受object类型的参数。请问我已经实现了隐式转换接口,又为什么会出现这个问题?如何解决?
我想大家可能没理解我的问题。我的需求就是做一个类似int的结构体,使用方法等都跟int一样,但是值可能有所不同(比如传入一个5,结构体里就解析变成了50)。因为使用方法相同,所以实现了一个AInt与int之间的隐式转换implicit,但是使用时发现类似如上的Test方法中使用(int)强制转换就会报错了。
实际使用时,如果传参类型是AInt的话,那直接 int a = param 是不会报错的,但是当类型是object的时候,就怎么用都会报错了。现在的解决方案是在AInt中增加一个方法ToInt,返回int类型的参数,但是总觉得这样做十分恶心,而且我也没搞清楚为什么会有这个报错,所以想向大家求助。