public struct MyInt
{
public int csInt;
public MyInt(int i)
{
csInt = i;
}
public MyInt(double d)
{
csInt = (int)d;
}
public static implicit operator MyInt(int value)
{
return new MyInt(value);
}
public static implicit operator MyInt(double value)
{
return new MyInt(value);
}
}
int MyFunc(MyInt i = 0)
{
return -1;
}
我想实现一个包装器结构MyInt
(此处简化)以接受int
默认值(我知道这很奇怪和不自然,我只需要它来遵守其他语言格式),但是当我像上面那样编码时遇到错误,错误在int MyFunc(MyInt i = 0)
VS2012 说:
'int' 类型的值不能用作默认参数,因为没有标准转换为 MyInt 类型
据我所知, int 和 double 在 C# 中也定义为 struct。所以我尝试了以下方法:
int MyFunc(double i = (int)0)
{
return -1;
}
它通过了!因此我认为默认参数中允许类型转换。
所以我的问题是:
- 为什么不能使用 MyInt 的隐式类型转换作为默认参数?
- VS 错误消息中的标准转换是什么意思,它与 MyInt 中定义的隐式转换不同吗?