如题,我有一个结构体,类似这样:
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类型的参数,但是总觉得这样做十分恶心,而且我也没搞清楚为什么会有这个报错,所以想向大家求助。
你的都说了//paramisAInt.是个struct类型了怎么会转换成为int类型呢
AIntb=(AInt)param;
intc=b.ToInt();
你是要把Object类型的参数转成整数吗?其实c#有很多方式可以做的,比如Convert.ToInt32,int.TryParse等,不必自己写方法。
估计是想扩充类型吧,按道理来说,是应该可以的。
convert.toint16(param.tostring())
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。