好像是在csdn上看见的一个问题。
如下 现有A() B() C() 。。。。等很多个方法 但是他担心程序按
    try
            {
                A();
                B();//如这里抛异常 C()将不执行。
                C();
      //.....
            }
            catch (Exception e)
            {
                
                //
            }
执行时如果遇到某个方法抛出异常,后面的方法不执行了。
他想怎么样呢?1.异常必须要捕获,但不一定要处理。2.某处抛出异常后,后面的方法继续执行。
如何解决:我看完了整个回帖都是用最笨的办法,其实我觉得还有其他办法可以解决。总结下。正好我想把不同声明的方法放在一个委托数组里,看看能不能读出来,分别执行数组里面的方法。
最开始的问题:
把能想到的方法列一遍
第一种方法:利用try{}finally{}
 try 
         {         
          try
                {
                    A();
                }
                finally
                {
                    try
                    {
                        B();
                    }
                    finally
                    {
                        try
                        {
                            C();
                        }
                        finally
                        {
                        }
                        
                    }
                }
         }
         catch (Exception e)
         {
                MessageBox.Show(e.Message);      
         }
第二种方法:利用多播委托
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace bfm
{
    
    public partial class Test : Form
    {
        delegate void dg();
        public Test()
        {
            InitializeComponent();
            Begin();
        }
        public void Begin()
        {
            
            dg de = A;
            de += B;
            de += C;
            //Delegate 别错写成delegate
            Delegate[] delegateArray = de.GetInvocationList();
            foreach (dg d in delegateArray)
            {
                try
                {
                    //d.Invoke();
                    d();
                }
                catch (Exception e)
                {
                    MessageBox.Show(d.Method.ToString());
                }
            }
        }
        public static void A()
        {
            int a = 0;
            int b = 10 / a;
        }
        public static void B()
        {
            int a = 0;
            int b = 10 / a;
        }
        public static void C()
        {
            int a = 0;
            int b = 10 / a;
        }
    }
}
第三种:用多线程 为每个方法开一个线程。
我测试了下 如下
 try
            {
                Thread one = new Thread(A);
                one.Start();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
上面这样不能捕获到方法内部的错误 只能捕获线程抛得一些异常。在每个方法里捕获异常?想想也对 既然A B C 这三个方法怀疑有异常抛出。为什么不在方法里面捕获异常呢?
-------------------------------------------------------------------------------------------------------------------------------------
由此想到的问题 如果用多播委托 则每个方法的声明格式都是一样的 (委托的协变和抗变 这里就不说了),那如果方法是
void A(){...}
void B(int size){...}
int C(){.....} 这时多播就有点鞭长莫及了。如何解决呢?
将不同委托类型的委托实例放在Delegate[]数组中后 在不知情的情况下 又怎么使用呢?