Search code examples
c#doubledecimalambiguous

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


This code works quite well in C# despite the fact that int can be implicitly converted to double and float:

void Main()
{
    int x = 7;
    F(x);
}
void F(double a)
{
    a.Dump("double");
}
void F(float a)
{
    a.Dump("float");
}

So, why this code won't compile? (The call is ambiguous between the following methods or properties: 'UserQuery.F(double)' and 'UserQuery.F(decimal)')

void Main()
{
    int x = 7;
    F(x);
}
void F(double a)
{
    a.Dump("double");
}
void F(decimal a)
{
    a.Dump("decimal");
}

All I did was replace the float variant of the function with a decimal variant.


Solution

  • There are no implicit conversions between floating-point types and the decimal type.

    If there's methods with float, double signatures there's no problem to determine a compatible method based on a minimum graduation requirements (the float method will be chosen).

    There's no such rule when dealing with float-point types and decimal as there's no implicit priority between double and decimal and it must be specified explicitly.