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

Kat*_*ova 8 c# double decimal ambiguous

这段代码在C#中运行得很好,尽管int可以隐式转换为doublefloat:

void Main()
{
    int x = 7;
    F(x);
}
void F(double a)
{
    a.Dump("double");
}
void F(float a)
{
    a.Dump("float");
}
Run Code Online (Sandbox Code Playgroud)

那么,为什么这段代码不能编译?(以下方法或属性之间的调用不明确:'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");
}
Run Code Online (Sandbox Code Playgroud)

我所做的就是用float变量替换函数的decimal变体.

sha*_*are 7

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

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

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