c# 在一个实现了隐式转换的结构体进行强制类型转换时报错

如题,我有一个结构体,类似这样:

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类型的参数,但是总觉得这样做十分恶心,而且我也没搞清楚为什么会有这个报错,所以想向大家求助。

你是要把Object类型的参数转成整数吗?其实c#有很多方式可以做的,比如 Convert.ToInt32,int.TryParse等,不必自己写方法。

你的都说了//param is AInt.是个struct类型了怎么会转换成为int类型呢
AInt b = (AInt) param;
int c = b.ToInt();

估计是想扩充类型吧,按道理来说,是应该可以的。

convert.toint16(param.tostring())