我正在尝试比较两个操作。与 == 的比较总是返回 false,就像 Equals 方法一样,即使它是同一个实例。
我的问题是:这真的不可能还是我做错了?
干杯
交流电
你做错了。
如果我相信你,当你说“即使它是同一个实例”时,那么以下代码通过执行LINQPad http://linqpad.net告诉我你一定做错了什么,或者“同一实例”不正确:
void Main()
{
Action a = () => Debug.WriteLine("test");
Action b = a;
(a == b).Dump("==");
(a.Equals(b)).Dump("Equals");
object.ReferenceEquals(a, b).Dump("ReferenceEquals");
}
输出是:
==
True
Equals
True
ReferenceEquals
True
换句话说,两者==
, a.Equals(b)
and object.ReferenceEquals(a, b)
说它是同一个实例。
另一方面,如果我复制代码:
Action a = () => Debug.WriteLine("test");
Action b = () => Debug.WriteLine("test");
然后他们都报假。
如果我将它们都链接到命名方法,而不是匿名方法:
void Main()
{
Action a = Test;
Action b = Test;
(a == b).Dump("==");
(a.Equals(b)).Dump("Equals");
object.ReferenceEquals(a, b).Dump("ReferenceEquals");
}
private static void Test()
{
}
那么输出是:
==
True
Equals
True
ReferenceEquals
False
换句话说,我现在有两个Action
实例,不仅仅是一个,但它们仍然比较相等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)