2016-04-03 73 views
8

此代码工作得很好在C#尽管INT可以隐式转换到浮动C#的调用为以下方法或属性之间暧昧:F(双)”和‘F(十进制)’

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

那么,为什么这个代码不会编译? (呼叫会是以下方法或属性之间暧昧:“UserQuery.F(双)”和“UserQuery.F(十进制)”)

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

与我所做的只是更换float变种的功能decimal变体。

+0

转储功能是什么样的? – jdweng

+0

这相当于Console.WriteLine(“something”)。 –

+1

你能不能更新全班? –

回答

7

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

如果使用float方法,双重签名,基于最小毕业要求(将选择float方法)确定兼容方法没有问题。

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