我正在编写一个Utility类,它有像IsEquals和IsGreaterThanEquals这样的方法,可以接受double类型的参数。当我将浮点值发送给方法时,它们会被隐式转换为double并进行比较。我不希望这事发生。当我发送浮点类型的值而不是双精度类型的值时,如何确保浮点值不会隐式转换为双精度,并可能抛出编译错误?
public static bool Equals(double firstDouble, double secondDouble)
{
return Math.Abs(firstDouble - secondDouble) <= double.Epsilon;
}即使我传递了浮点型参数值,上面的代码也能正常工作。当我将浮点参数值传递给上面的方法时,我希望编译抛出错误。
发布于 2019-08-12 21:02:37
如果您希望在编译过程中出现错误,可以提供带有float的方法,但将它们标记为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;
}发布于 2019-08-12 20:58:44
使用object作为参数类型,并检查它们是否为double类型。
public static bool Equals(object firstDouble, object secondDouble)
{
if(firstDouble is double && secondDouble is double)
return Math.Abs((double)firstDouble - (double)secondDouble) <= double.Epsilon;
throw new ArgumentException("parameter type should be double.");
}发布于 2019-08-12 20:59:30
我不知道预期大小(int,long)是多少,所以我只是给出了一个所需大小的样本
public static bool Equals(object firstDouble, object secondDouble)
{
if((firstDouble.GetType() != typeof(int)) || (secondDouble.GetType() != typeof(int)))
{
return false;
}
else
{
return Math.Abs((int)firstDouble - (int)secondDouble) <= double.Epsilon;
}
}https://stackoverflow.com/questions/57461515
复制相似问题