C# 调用在以下方法或属性之间不明确:F(double)' 和 'F(decimal)'
C# The call is ambiguous between the following methods or properties: F(double)' and 'F(decimal)'
尽管 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)')
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方法)。
处理浮点类型和小数时没有这样的规则,因为双精度和小数之间没有隐式优先级,必须明确指定。
尽管 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)')
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方法)。
处理浮点类型和小数时没有这样的规则,因为双精度和小数之间没有隐式优先级,必须明确指定。