Viisen 2015-08-13 03:33 采纳率: 0%
浏览 2570
已结题

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

  • 写回答

4条回答 默认 最新

  • lhl_lqc 2015-08-13 03:41
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿