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

C# The call is ambiguous between the following methods or properties: F(double)' and 'F(decimal)'

尽管 int 可以隐式转换为 doublefloat,但此代码在 C# 中运行良好:

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 变体。

浮点类型和小数类型之间没有隐式转换。

如果有float的方法,双签名根据最低毕业要求确定兼容的方法是没有问题的(会选择float方法)。

处理浮点类型和小数时没有这样的规则,因为双精度和小数之间没有隐式优先级,必须明确指定。