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

C#调用在以下方法或属性之间不明确:F(double)';和';F(十进制)和#x27;,c#,double,decimal,ambiguous,C#,Double,Decimal,Ambiguous,尽管int可以隐式转换为double和float,但该代码在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)' 我所做的只是将

尽管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)'


我所做的只是将函数的
float
变量替换为
decimal
变量。

浮点类型和decimal类型之间没有隐式转换

如果有带浮动、双重签名的方法,那么根据最低分级要求确定兼容的方法是没有问题的(将选择浮动方法)


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

转储函数是什么样子的?这相当于Console.WriteLine(“某物”).你能更新整个类吗???@jdweng代码是用LinqPad编写的decimal类有以下定义:公共静态显式运算符int(十进制值);而float类没有。因此,十进制必须有一个转换才能将整数转换为十进制,而float将自动进行转换。
void Main()
{
    int x = 7;
    F(x);
}
void F(double a)
{
    a.Dump("double");
}
void F(decimal a)
{
    a.Dump("decimal");
}