C#中由NaN引发的错误及其修改。
简述
以下是出错的代码
public double Temp { get=>_temp;
set {
if(value == double.NaN){
throw new ValOutOfRangeException();
}
_temp = value;
}
}
原意是在属性Temp
上添加setter
,如果要将Temp
设为NaN
则抛出异常。
结果任然可以将Temp
设为NaN
。
原因
造成这一错误的原因是double.NaN
不能用==
判等
运行如下代码
Console.WriteLine($"{double.NaN==double.NaN}");
其结果是False
。
解决
用double.IsNaN
判断
public double Temp { get=>_temp;
set {
if(double.IsNaN(value)){
throw new ValOutOfRangeException();
}
_temp = value;
}
}
延伸
除了NaN
以外,其他的浮点数
也最好不用==
判断。
Math.Net
有相关的解决方案。
本文由 joe_zhouman 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:2021-03-14 17:17:41