开发者社区> 问答> 正文

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

展开
收起
爱吃鱼的程序员 2020-06-23 15:07:37 567 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

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

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

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

    convert.toint16(param.tostring())

    2020-06-23 15:07:57
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载