这怎么可能?这两个值都在内存中,并且在设置了两个值后,执行在断点处暂停。我很难找到一个if语句来检查两个bool是否不同,当值实际上相同时执行。所以我在同一个断点处使用立即窗口深入研究。
好奇,我停止了程序并且(在原始调试点,我注意到这种不一致)我插入了几行代码:
var one = true;
var two = true;
我是否打破了C#或其他什么?如何在同一个方法调用范围中使用两对布尔值(我仔细检查它们的.GetType()返回布尔值)是否使用相等运算符不一致?
虽然它无关紧要,但第一对(其中double equals方法返回错误的结果)是在方法调用之前和之后使用PropertyInfo.GetValue(对象目标)收集的,可能会也可能不会更改值目标上的财产。我正在使用GetValue两次,以确保在“做某事”之前更改了属性的值。
我在程序的许多执行中得到了相同的结果,所以我认为这不会影响执行环境。
答案 0 :(得分:4)
您没有提供任何代码,但是您提到您正在使用Reflection,因此您可能将currentValue
和newValue
声明为object
个变量。如果是这种情况,那么您应该使用Object.Equals
方法来比较值相等的变量:
if (object.Equals(currentValue, newValue))
{
...
}
Boxing相同的布尔值两次将创建两个不同的对象,因此==
运算符在与两个object
变量一起使用时检查引用的相等性,将返回false:
object currentValue = true;
object newValue = true;
Console.WriteLine(currentValue == newValue); // False
Console.WriteLine(object.Equals(currentValue, newValue)); // True