我遇到问题(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.
我可以看到两种可能性:
useaction.Postcondition[goalneeds]并current[goalneeds]返回除了a之外的其他内容bool.它们返回一个类的对象,该类具有ToString()有时返回字符串的方法"True".在您的情况下返回的特定对象都生成"True"但不是同一个对象,因此==是false(或者这些对象的类型以==使其返回false的方式重载运算符,或者其ToString()方法返回的其他对象"False").
(显然事实证明是这样的,虽然"类"实际上只是object带有一个盒装bool内部.这确实具有描述的效果,因为==在这种情况下执行引用相等.)
任何一个useaction.Postcondition或current(或两个)的索引器都有一个改变其自身价值的副作用.因此,第二次调用它会返回与第一次不同的结果.
如果你只是步入你引用的代码行并使用Watch窗口,这两个都应该立即在调试器中可见.
| 归档时间: |
|
| 查看次数: |
3208 次 |
| 最近记录: |