var v1 = propertyInfo.GetValue(actor);
var v2 = propertyInfo.GetValue(blueprint);
bool isActorValueSame = v1 == v2;
每当我尝试比较v1和v2时 - 即使v1和v2都等于500.0f,我也会收到错误的布尔值。任何想法为什么会这样?我知道比较两个浮点数是不安全的,因为浮点不准确,但我的值都是100%相等。
答案 0 :(得分:5)
因为propertyInfo.GetValue(blueprint);
将返回对象,而对象是引用类型,所以相等的运算符总是会让你失误。
在比较前尝试施放
var v1 = (float)propertyInfo.GetValue(actor);
var v2 = (float)propertyInfo.GetValue(blueprint);
bool isActorValueSame = v1 == v2;
有关PropertyInfo.GetValue
方法
答案 1 :(得分:0)
由Jenish写的......附录:
var v1 = propertyInfo.GetValue(actor);
var v2 = propertyInfo.GetValue(blueprint);
bool isActorValueSame = v1.Equals(v2);
这样可行,因为Object.Equals:
对于值类型,相等性定义为按位相等