我的问题是:这真的不可能,还是我做错了?
干杯
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#:行动无与伦比?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)