我有一个代表指向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
{
}
}
还有其他方法可以避免这种情况吗?
答案 0 :(得分:0)
您无法使用try
/ catch
模式在 not 的意义上“避免”这种情况,以确保您的代码通过委托这引起了例外。
尽管如此,没有什么可以阻止您编写自己的类来包装此功能 - 在您使用M
代理的任何地方减少此精确代码的潜在扩散。
顺便说一句,我相信你可以改变这一行:
item.DynamicInvoke(null);
到此(避免DynamicInvoke
):
MethodHandler handler = (MethodHandler)item;
handler.Invoke();