此代码在C#中运行良好,尽管 int 可以隐式转换为 double 和 float :
void Main()
{
int x = 7;
F(x);
}
void F(double a)
{
a.Dump("double");
}
void F(float a)
{
a.Dump("float");
}
那么,为什么这段代码不能编译? (以下方法或属性之间的调用不明确:'UserQuery.F(double)'和'UserQuery.F(decimal)')
void Main()
{
int x = 7;
F(x);
}
void F(double a)
{
a.Dump("double");
}
void F(decimal a)
{
a.Dump("decimal");
}
我所做的就是用float
变体替换函数的decimal
变体。
答案 0 :(得分:7)
浮点类型和十进制类型之间没有隐式转换。
如果有浮动,双重签名的方法,根据最小刻度要求确定兼容方法没有问题(将选择浮动方法)。
处理浮点类型和十进制时没有这样的规则,因为double和decimal之间没有隐式优先级,必须明确指定。