为什么继承自Exception的类 无法捕获异常

xdq025 2011-02-16 01:38:00

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;
}
}
}

如下图 调试时 提示错误 却不捕获异常
...全文
296 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdq025 2011-02-16
  • 打赏
  • 举报
回复
谢谢各位的热心回答!
xdq025 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sp1234 的回复:]
比如说,你的代码应该写:

C# code
try
{
File.Create(.....
}
catch(FileNotFoundException ex)
{
throw new MyExceltion{MyIndex=123456789};
}


这类代码,就是把底层的异常包装成自定义异常,然后继续抛出。


不过你的代码有个问题。通常希望将原……
[/Quote]
O(∩_∩)O谢谢
  • 打赏
  • 举报
回复
比如说,你的代码应该写:
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;}
}
xdq025 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sp1234 的回复:]
想捕捉到自定义的异常,那么代码抛出的也应该是自定义的异常。
[/Quote]
如何让它抛出自定义异常呢?
能举个范例么?
  • 打赏
  • 举报
回复
想捕捉到自定义的异常,那么代码抛出的也应该是自定义的异常。
xdq025 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cgabriel 的回复:]
MyException 是 Exception 的子类, 所以 MyException 可以看做是 Exception。

同样理由, MyExcpetion 不可以看做是 Exception。

所以。。它抛出的是 Exception, catch(MyException) 当然捕捉不到。。
[/Quote]
O(∩_∩)O~
能请教下:
如何捕捉到自定义的异常呢?
CGabriel 2011-02-16
  • 打赏
  • 举报
回复
MyException 是 Exception 的子类, 所以 MyException 可以看做是 Exception。

同样理由, MyExcpetion 不可以看做是 Exception。

所以。。它抛出的是 Exception, catch(MyException) 当然捕捉不到。。
  • 打赏
  • 举报
回复
你可以看看 msdn:http://msdn.microsoft.com/zh-cn/library/3tca6706.aspx

msdn上写道:确定正确 Catch 块的方法是将异常的类型与 Catch 块中指定的异常名称进行匹配

可见你的MyException并不是匹配那个directorynotfound异常的。
xdq025 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mr_graceless 的回复:]
switch (index)
{
case 0: break;
default: return m_data[index];
}
在这里已经return了,没有走到return base.Message;吧
[/Quote]
那么你认为应该如何修改呢?
xdq025 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xdq025 的回复:]
引用 3 楼 huminghua 的回复:
还有default:。。。break;

o(╯□╰)o~!
疏忽了
[/Quote]
不对啊~!
被忽悠了 return 是不需要 break的
xdq025 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huminghua 的回复:]
还有default:。。。break;
[/Quote]
o(╯□╰)o~!
疏忽了
huminghua 2011-02-16
  • 打赏
  • 举报
回复
还有default:。。。break;
huminghua 2011-02-16
  • 打赏
  • 举报
回复
为什么不直接在catch里面写Exception呢?不明白!再者你也可以看看File.Create会有哪些异常发生捕获一下就OK啦!
Mr_graceless 2011-02-16
  • 打赏
  • 举报
回复
switch (index)
{
case 0: break;
default: return m_data[index];
}
在这里已经return了,没有走到return base.Message;吧

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧