我有一个代表,指出了3种不同的方法。这些方法将添加到其调用列表中。
什么是第二种方法引发异常?我仍然需要执行第三个方法。
我认为下面提到的代码是一种选择
public delegate void MethodHandler();
A oa = new A();
B ob = new B();
C oc = new C();
D od = new D();
MethodHandler M = oa.TestM;
M += ob.TestM;
M += oc.TestM;
M += od.TestM;
foreach (Delegate item in M.GetInvocationList())
{
try
{
item.DynamicInvoke(null);
}
catch
{
}
}
还有其他选择可以避免这种情况吗?
最佳答案
您将无法避免使用try
/ catch
模式来确保您的代码经过引发异常的委托,从而避免这种情况。
但是,没有什么可以阻止您编写自己的类来包装此功能的-可以减轻在使用M
委托的任何地方此确切代码的潜在扩散。
顺便说一句,我相信您可以更改此行:
item.DynamicInvoke(null);
为此(避免
DynamicInvoke
):MethodHandler handler = (MethodHandler)item;
handler.Invoke();