c#:( True == True)返回False

-6 c# boolean

我遇到问题(true == true)返回false.

Console.WriteLine(
    useaction.Postcondition[goalneeds].ToString() + "==" + 
    current[goalneeds].ToString() + " returns " + 
    (useaction.Postcondition[goalneeds] == current[goalneeds]).ToString());
Run Code Online (Sandbox Code Playgroud)

输出:True==True returns False

useaction.Postcondition与current类型相同.

尽管预览颜色如此,"后置条件"并非一成不变

感谢任何帮助,我不知道我可以分享的任何其他相关信息.

解:

                bool a = (bool)useaction.Postcondition[goalneeds];
                bool b = (bool)current[goalneeds];
                Console.WriteLine(a.ToString() + "==" + b.ToString() + " returns " + (a==b).ToString());
Run Code Online (Sandbox Code Playgroud)

第一个代码比较了对象类型.第二个代码比较bools.

Tim*_*mwi 6

我可以看到两种可能性:

  • useaction.Postcondition[goalneeds]current[goalneeds]返回除了a之外的其他内容bool.它们返回一个类的对象,该类具有ToString()有时返回字符串的方法"True".在您的情况下返回的特定对象都生成"True"但不是同一个对象,因此==是false(或者这些对象的类型以==使其返回false的方式重载运算符,或者其ToString()方法返回的其他对象"False").

    (显然事实证明是这样的,虽然"类"实际上只是object带有一个盒装bool内部.这确实具有描述的效果,因为==在这种情况下执行引用相等.)

  • 任何一个useaction.Postconditioncurrent(或两个)的索引器都有一个改变其自身价值的副作用.因此,第二次调用它会返回与第一次不同的结果.

如果你只是步入你引用的代码行并使用Watch窗口,这两个都应该立即在调试器中可见.