我有一个代表,指出了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();

10-06 01:46