c# - 如何防止函数中的隐式转换?
问题描述
我正在编写一个实用程序类,它具有像 IsEquals 和 IsGreaterThanEquals 这样的方法,它们接受 double 类型的参数。当我将浮点值发送到方法时,它们会隐式转换为双精度并进行比较。我不希望这种情况发生。当我发送浮点类型值而不是双精度类型值时,如何确保浮点值不会隐式转换为双精度并可能引发编译错误?
public static bool Equals(double firstDouble, double secondDouble)
{
return Math.Abs(firstDouble - secondDouble) <= double.Epsilon;
}
即使我传递浮点参数值,上面的代码也有效。当我将浮点参数值传递给上述方法时,我希望编译抛出错误。
解决方案
如果您想在编译期间出错,请提供带有float
's 的方法,但将它们标记为Obsolete
:
[Obsolete("Don't use floats", error: true)]
public static bool Equals(float a, float b) {
throw new NotImplementedException();
}
[Obsolete("Don't use floats", error: true)]
public static bool Equals(double a, float b) {
throw new NotImplementedException();
}
[Obsolete("Don't use floats", error: true)]
public static bool Equals(float a, double b) {
throw new NotImplementedException();
}
public static bool Equals(double firstDouble, double secondDouble) {
return Math.Abs(firstDouble - secondDouble) <= double.Epsilon;
}
推荐阅读
- html - 如何使用 CSS 替换 PNG 图像的颜色?
- spring - 何时为 Spring Boot 执行指定多个配置文件
- excel - 过滤数据后获取单元格
- php - Yii2:如何发送模型和不属于模型的数组
- python - Weasyprint 或 Reportlab 用于在 Heroku 上生成 Django 报告
- linux - 如何使用 signalfd 在多线程 Linux 程序中捕获 SIGTERM
- reactjs - 如何有条件地运行 Apollo 客户端的 useSubscription 钩子?
- mysql - 如何使用 powershell 将 MySQL Id 列值增加 1
- android - 我无法在 android 的 viewholder 图像中设置图像
- machine-learning - 针对类不平衡结合重采样和特定算法