我正在尝试将 aWaitCallBack
转换为Action<object>
我这样做是:
WaitCallBack w1 = Foo;
Action<object> a1 = new Action<object>(w1);
Action<object> a2 = Foo;
但是,当我尝试比较a1
with 时a2
,它会返回false
。
有没有派出代表,这样平等就成真了?
谢谢。
代表按方法+目标进行比较;问题是你在比较不同的东西!
如果我们将此行扩展到编译器所看到的内容,也许会更清楚:
Action<object> a1 = new Action<object>(w1);
实际上是:
Action<object> a1 = new Action<object>(w1.Invoke);
Invoke
(对委托使用隐式操作)
你可以看到目标是w1
,方法是Invoke
。我们可以确认这一点:
Console.WriteLine(a1.Method.Name); // Invoke
Console.WriteLine(ReferenceEquals(a1.Target, w1)); // true
与其他比较:
Action<object> a2 = Foo;
在这里,目标是null
(如果是静态的)或this
(如果是非静态的),方法是Foo
. 代表不一样。它报告是正确的false
。
你可以手动检查这个链式操作,但是有点乏味,特别是如果你需要考虑每个组合/深度;但一个简单的例子:
Delegate del = a1.Target as Delegate;
if(del != null)
{
if(del.Method == a2.Method && del.Target == a2.Target)
{
Console.WriteLine("pass");
}
}