繁体   English   中英

c# 方法重载选择错误的重载并编译

[英]c# method overload picks the wrong overload and compiles

我有以下内容:

EnErrorCodes WriteToCard(EnRegs address, byte data)
EnErrorCodes WriteToCard(EnRegs address, ushort data)
EnErrorCodes WriteToCard(EnRegs address, uint data)
EnErrorCodes WriteToCard(EnRegs address, float data)
EnErrorCodes WriteToCard(EnRegs address, double data)

但错过了ulong超载。

然后,当盲目地使用ulong重载时,编译器选择了float重载而不是抛出错误。

花了很长时间才弄清楚为什么系统没有正确写入该数据,只有 ctrl+单击调用它的WriteToCard方法,然后将其带到浮点重载。

创建ulong显然对它进行了排序,但我不明白它为什么会发生,因为它是一个相当烦人的尝试和查找功能。

这是因为Implicit数字转换

在此处输入图像描述

如果您查看上图中突出显示的部分,C# 会将ulong转换为floatdoubledecimal

由于您有带有float参数的WriteToCard() ,如果您使用ulong作为类型传递data ,编译器会将其隐式转换为 float 并执行它,而不是引发错误。

ulong可以隐式转换floatdouble ,因此选择方法重载有两个有效的候选者。 选择float是因为它是更好的转换目标

给定两种不同的类型 T1 和 T2,如果不存在从 T2 到 T1 的隐式转换,则 T1 是比 T2 更好的转换目标,并且至少满足以下一项:

  • 存在从 T1 到 T2 的隐式转换
  • ...

所以没有从doublefloat的隐式转换,但是有一个从floatdouble

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM