class MyException : Exception
{
    private Dictionary<int, string> m_data = new Dictionary<int, string>();
    private int index=0;
    public int MyIndex
    {
        set
        {
            index = value;
        }
    }
    public MyException()
    {
        m_data.Add(-1, "true");
        m_data.Add(1, "找不到指定item");
    }
    public override string Message
    {
        get
        {
            switch (index)
            {
                case 0: break;
                default: return m_data[index];
            }
            return base.Message;
        }
    }
}如下图 调试时 提示错误 却不捕获异常

解决方案 »

  1.   

    switch (index)
                {
                    case 0: break;
                    default: return m_data[index];
                }
    在这里已经return了,没有走到return base.Message;吧
      

  2.   

    为什么不直接在catch里面写Exception呢?不明白!再者你也可以看看File.Create会有哪些异常发生捕获一下就OK啦!
      

  3.   

    不对啊~!
    被忽悠了  return 是不需要 break的
      

  4.   

    你可以看看 msdn:http://msdn.microsoft.com/zh-cn/library/3tca6706.aspxmsdn上写道:确定正确 Catch 块的方法是将异常的类型与 Catch 块中指定的异常名称进行匹配可见你的MyException并不是匹配那个directorynotfound异常的。
      

  5.   

    MyException 是 Exception 的子类, 所以  MyException 可以看做是 Exception。同样理由, MyExcpetion 不可以看做是 Exception。所以。。它抛出的是 Exception, catch(MyException) 当然捕捉不到。。
      

  6.   

    比如说,你的代码应该写:try
    {
       File.Create(.....
    }
    catch(FileNotFoundException ex)
    {
        throw new MyExceltion{MyIndex=123456789};
    }这类代码,就是把底层的异常包装成自定义异常,然后继续抛出。
    不过你的代码有个问题。通常希望将原始的异常嵌入自定义的异常的InnerException里边,所以自定义的异常通常会有一个参数,用来把ex传统地给它。比如:public class aaa : Exception 
    {
        public aaa(string message, Exception e) : base(message, e) { }    public int MyIndex{get;set;}
    }