Vss2005|Silverlight教程|jQuery教程|Ajax框架|Asp.net下载教程|VS2008下载安装教程 - Kai.Ma的世界,道法自然
sliverlight教程 Ajax jQuery VS2008 Vss2005
博客园
首页
社区
新随笔
联系
订阅
管理
随笔-69 评论-645 文章-19 trackbacks-13
也说说C#的“异常重抛”
几乎大多数C#程序员都这样写异常处理代码的
代码一:
1
try
2
{ThrowException();}
3
catch
(Exception ex)
4
{throw ex;}
5
finally
6
{}
如果你的底层代码还有一个方法用来抛出异常
代码二:
1
public
ThrowException()
2
{
3
throw
new
Exception(
"
一个底层异常
"
);
4
}
那么,你也许需要将这个底层的异常
重新抛出
。
如果你使用代码一的方式,将会打断异常的堆栈跟踪,在VS2005中的表现是新抛出了一个异常(代码一中的ex),而不是抛出底层异常(代码二中的new Exception("一个底层异常");)
那么怎么才能不打断异常的堆栈跟踪并能重抛底层异常呢,可以这样写。
代码三:
1
try
2
{
3
ThrowException();
4
}
5
catch
6
{
7
throw
;
8
}
这样就能重新抛出代码二中的底层异常。
当然你可以包装一下底层异常。代码如下:
代码四:
try
{
ThrowException();
}
catch
(Exception ex)
{
throw
new
Exception(
"
被包装后的底层异常
"
,ex);
}
这样不会打断异常堆栈跟踪。
我的理解比较浅,多多指正。
参考资料:
http://www.cnblogs.com/1landonsea/archive/2005/01/15/RethrowExceptionInCSharp.html
posted on 2007-03-15 00:16
Kai.Ma
阅读(2469)
评论(17)
编辑
收藏
所属分类:
开发环境
评论:
#1楼
2007-03-15 09:01 |
非我
能举详细点的例子吗,这样实在看不出来有什么太大的差异
回复
引用
查看
#2楼
2007-03-15 09:18 |
Cat Chen
throw ex是会隐藏深层堆栈的,所以最好不要使用。
throw new Exception(ex)可以保持深层堆栈,但是改变了异常的类型,除非你确信你的组件的使用者不关注原本那个异常的类型,否则也不要用。
throw;这是建议用法,如果你所需要的仅仅是异常的继续上升。
回复
引用
查看
#3楼
2007-03-15 10:01 |
henry
有时.net运行时抛出的Exception并不是最终异常的根源,可以通过InnerException 属性得到引发该Exception的源Exception.
回复
引用
查看
#4楼
2007-03-15 10:03 |
YanziMyWife
以前都没有关注过这个问题 谢谢LZ共享
回复
引用
查看
#5楼
2007-03-15 10:08 |
skyfei [未注册用户]
http://www.cnblogs.com/skyfei/archive/2006/09/27/516406.html
回复
引用
#6楼
2007-03-15 10:51 |
reonlyrun
还是
AVOID "throw e" !!!
比较清楚
回复
引用
查看
#7楼
2007-03-15 12:28 |
JesseZhao
呵呵
回复
引用
查看
#8楼
2007-03-15 13:21 |
Cat Chen
我这里也有一篇:
在 catch 块内进行 throw 的多种方式
回复
引用
查看
#9楼
[
楼主
] 2007-03-15 14:15 |
马哥
看来讨论出真知。谢谢skyfei和Cat Chen的指点。
回复
引用
查看
#10楼
2007-03-15 14:37 |
Anders Cui
如果较低层次的异常在较高层次的运行环境中没有什么意义,可以考虑对较低层次抛出的异常进行适当的封装,在对异常进行封装时将其指定为内部异常(inner exception)。看看我刚写的:)
http://www.cnblogs.com/anderslly/archive/2007/03/15/understandingexception2.html
回复
引用
查看
#11楼
2007-03-15 20:40 |
Cat Chen
@Anders Cui
谢谢,看Framework Design Guideline时看过那些规则了。
回复
引用
查看
#12楼
2007-03-15 22:09 |
Anders Cui
@Cat Chen
汗...
回复
引用
查看
#13楼
2007-03-15 22:24 |
讨厌 [未注册用户]
最讨厌代码左边加行号
回复
引用
#14楼
[
楼主
] 2007-03-15 22:28 |
马哥
@讨厌
为什么呢?
回复
引用
查看
#15楼
2007-03-16 13:04 |
Anders Cui
@马哥
拷到编辑器里,行号也算作文本了 :)
回复
引用
查看
#16楼
[
楼主
] 2007-03-16 13:19 |
马哥
@Anders Cui
明白了,以后写blog我一定改
回复
引用
查看
#17楼
2007-03-19 15:48 |
阿牛
同意,要是用 throw ,可以在出错时,定位到出错行。要是用 throw ex;完蛋了。找起错误来,怎一个费劲了得
回复
引用
查看
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2008-03-19 22:19 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索
相关文章:
概念,依旧是概念……csproj文件是做什么用的?
C# 3.0新语言特性和改进(上篇)
Struts常见异常信息和解决方法
C#下如何实现服务器+客户端的聊天程序
关于vista+office2007+vs2008开发环境
虚拟机搭建MOSS开发环境的问题
报告一下自己的python开发环境吧 :)
网络技术包含了哪些东西?
相关链接:
所属分类的其他文章:
Visual Studio 2008 使用小技巧
最佳黑色背景的Visual Studio 2005/2008配置-尤其适合开发人员使用
再推一款正则表达式测试工具
推荐一款Log4net 日志浏览器:Log4Net Dashboard
SilverLight开发系列第1步:搭建开发环境
修复Jscript(IE浏览器脚本引擎)异常
服务器Jmail配置问题
今天发现了一款新的文本编辑器EmEditor
VS2008的Web Application——net 1.1 CodeBehind 模式的回归(非编译模式)
VS2008 F5不能调试情况一例
最新IT新闻:
Silverlight 2正式版SDK可以下载
Silverlight对Flash 微软打垮Adobe
IBM扩大研究规模 在上海成立研究院
eWeek评Google八大“20%项目”
微软终于发布Silverlight 2正式版
有问题这里提,承接大型项目
网名:Kai.Ma
常住:北京
原籍:湖南
职业:WEB架构师
QQ:29121937
MSN:kai521(AT)msn.com
中国Ajax论坛
访问“中国Ajax论坛(Google)”
与我联系
发短消息
搜索
随笔分类
ASP.NET MVC Framework(3)
Net 2.0 & ASP.NET & AJAX(16)
Net 3.5 & SilverLight(5)
开发环境(18)
数据库(2)
琐即生活(12)
在线生成网页缩略图(WebSnap)(3)
文章分类
Ajax/JQuery/Javascript(2)
W3C标准开发(1)
道(1)
开发工具/环境设置(2)
开发规范(7)
设计模式(5)
数据结构(1)
数据库(1)
朋友的博客
拓荒者
天行健,君子当自强不自息
重要网站
code.google.com
如果还不知道就去code.google.com看一把
MSDN Code Gallery
积分与排名
积分 - 87739
排名 - 465
最新评论
1. re: RegexDesigner.NET 正则表达式开源工具
现在一直用 Regexbudy。
--Doho
2. re: 再推一款正则表达式测试工具
还有个异常: ************** 异常文本 ************** System.Runtime.InteropServices.ExternalException: 所请求的剪贴板操...
--Doho
3. re: SilverLight开发系列第1步:搭建开发环境
--引用-------------------------------------------------- Kai.Ma: @ColdDog 如果你的VS2008是中文的,就必须安中文版本的Silv...
--tigercopy
4. re: ASP.NET中上传多文件时,用日期时间命名新文件,这不是个好主意。
恩 个人认为用GUID比较合适
如果需要的话 可以用时间来做个第二层的索引
--飞林沙
5. re: c#接口和抽象类的区别
2.接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法; 这里的继承应该是“抽象类”?? ---------- 可以这样理解,他的意思应该是说这里的接口并没有那种父类和子类的关系 4...
--飞林沙
6. re: Vss2005局域网开发权限设置指南
@我是求学者
A,B作为windows用户,权限太高了,设置低点
--Kai.Ma
7. re: Vss2005局域网开发权限设置指南
我现在也有一个VSS管理的问题,请大家帮忙解决一下。 管理员给A和B两个USER用户分别设置了不同的权限,但是A和B之间可以相互修改权限,怎么才能控制A和B两个用户设置别人的权限呢?望各位帮忙解决一下...
--我是求学者
8. re: 最佳黑色背景的Visual Studio 2005/2008配置-尤其适合开发人员使用
我建议电脑屏幕不要用白色,因为白色对眼睛的刺激是最大的。像整天对着电脑的工作都,也应该注意一下。 其实,只要稍微设置一下,就能让你电脑上的窗口从白花花的颜色变成淡淡的苹果绿。 设置方法有三种如...
--Kai.Ma
9. re: SilverLight开发系列第2步:使用vs2008和Blend 2.5打造Hellow World程序
微软的东西真是垃圾,版本之间极度不兼容
--foxinhongyan
10. re: jquery技巧总结
1.2.3版的jq,我个人总结:display:none的东西,不论后来display属性为什么,jq的事件会丢失
这个bug似乎在1.2.6版本中修复了。
--Kai.Ma
评论排行榜
1. 【下载源码】在线生成网页缩略图.超越Snap.com:WebSnap Beta 1.1 发布。感谢博客园的“萧寒”重写的底层。开源。(142)
2. 团队最近招人,我出的几个笔试题,希望不是“鄙视题”(90)
3. 中国的软件人才是靠挖的(56)
4. 湖南长沙火车站,我为你感到羞愧。(28)
5. ASP.NET中上传多文件时,用日期时间命名新文件,这不是个好主意。(22)
6. 一个典型的数据库操作事务死锁分析(21)
7. 初来乍到,发布一个杀手应用:snap.com的web预览图功能,我给它取名叫“WebSnap”(21)
8. Vss2005局域网开发权限设置指南(19)
9. 轻量级的Ajax解决方案——DynAjax的JQuery版(17)
10. 也说说C#的“异常重抛”(17)