c#:行动无与伦比?

c#:行动无与伦比?,第1张

概述我想比较两个动作.与==的比较总是返回false,就像Equals-method一样,即使它是同一个实例. 我的问题是:这真的不可能,还是我做错了? 干杯 AC 你做错了. 如果我相信你,当你说“即使它是同一个实例”,那么通过LINQPad执行的以下代码告诉我你必须做错了什么,或者“同一个实例”是不正确的: void Main(){ Action a = () => Debug.Writ 我想比较两个动作.与==的比较总是返回false,就像Equals-method一样,即使它是同一个实例.

我的问题是:这真的不可能,还是我做错了?

干杯
AC

解决方法 你做错了.

如果我相信你,当你说“即使它是同一个实例”,那么通过LINQPad执行的以下代码告诉我你必须做错了什么,或者“同一个实例”是不正确的:

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)和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实例,而不仅仅是一个,但它们仍然相等.

总结

以上是内存溢出为你收集整理的c#:行动无与伦比?全部内容,希望文章能够帮你解决c#:行动无与伦比?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1223174.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存