C#以下方法或属性之间的调用不明确:F(double)'和'F(decimal)'

时间:2016-04-03 12:06:16

标签: c# double decimal ambiguous

此代码在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变体。

1 个答案:

答案 0 :(得分:7)

浮点类型和十进制类型之间没有隐式转换。

如果有浮动,双重签名的方法,根据最小刻度要求确定兼容方法没有问题(将选择浮动方法)。

处理浮点类型和十进制时没有这样的规则,因为double和decimal之间没有隐式优先级,必须明确指定。