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;
}
}
}如下图 调试时 提示错误 却不捕获异常
{
case 0: break;
default: return m_data[index];
}
在这里已经return了,没有走到return base.Message;吧
被忽悠了 return 是不需要 break的
{
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;}
}