当前位置:编程学习 > C#/ASP.NET >>

诚心问各位~关于try catch和throw 的我问题

诚心诚意问各位高手。
现在有这样的一个实际情况,
就是自己封装一些框架,接着表示成调用。
想问问以下两种情况,大家一般是怎么做的?
1、是底层(逻辑层)直接用try catch捕捉异常, 然后用 out string 的方法去获取异常信息, 表示层又再try catch 捕捉异常
(PS:本人发觉,用这种方法,表示层调用底层时又要先判断有没有异常再进行其他操作,代码量多很多~)


2、底层异常直接抛出,只在表示层try catch一次捕捉,显示给用户看。
(PS: 只捕捉一次异常,代码量少很多而且代码可读性强,但是会不会对程序有什么影响?)

大家比较推荐哪一种? 异常 try cath throw --------------------编程问答-------------------- 这个要看具体处理的吧, 一般都是结合用,如果只是需要展示给客户看,表现层直接捕获即可,但有些处理牵扯到资源释放什么的(如数据库连接),那就要在底层处理掉 --------------------编程问答-------------------- 个人意见第2种,因为第2种很简洁也符合逻辑,调用端接收到异常后,自己根据实际情况进行处理,比较好。 --------------------编程问答-------------------- 第二种才是王道 --------------------编程问答-------------------- 也许抛异常的时候可以先把异常归类下,要不用户也许不知道代码直接抛出来的玩意是什么意思 --------------------编程问答--------------------
引用 楼主 yuenfoon00 的回复:
1、是底层(逻辑层)直接用try catch捕捉异常, 然后用 out string 的方法去获取异常信息, 表示层又再try catch 捕捉异常

看不懂这是什么意思。你是不是说,先自欺欺人地用string返回什么东西,然后再throw new exception?那么这是为了什么呢?

有时候我看到这类扯淡的代码
try
{
   ...
}
catch(ex Exception)
{
   throw ex;
}


我实在是不知道这是干什么的。 --------------------编程问答-------------------- 一般第二种吧。资源释放什么的放在final里面就好了嗯。 --------------------编程问答--------------------
引用 5 楼 sp1234 的回复:
Quote: 引用 楼主 yuenfoon00 的回复:

1、是底层(逻辑层)直接用try catch捕捉异常, 然后用 out string 的方法去获取异常信息, 表示层又再try catch 捕捉异常

看不懂这是什么意思。你是不是说,先自欺欺人地用string返回什么东西,然后再throw new exception?那么这是为了什么呢?

有时候我看到这类扯淡的代码
try
{
   ...
}
catch(ex Exception)
{
   throw ex;
}


我实在是不知道这是干什么的。






public int test(out strng errorMsg)  
  try{

  }catch(Exception ex){
     errorMsg = ex.Message;
  }


我意思是用过out来显示错误信息~ --------------------编程问答-------------------- 有的应该吞的就吞了,不能吞的就吐出来。 --------------------编程问答-------------------- 推荐第二种,不要干这样的事情
public int test(out strng errorMsg)  
  try{
 
  }catch(Exception ex){
     errorMsg = ex.Message;
  }
1.异常信息不完整,因为可能还有个Inner异常~
2.如果我用全局记录异常信息的地方(如Application_Error事件),或者用AOP,那么捕获不到了异常了~

另外,不要把异常信息给用户,就是最简单的“未将对象实例化”
也会吓坏到用户的 --------------------编程问答-------------------- 纯粹来学习的,我觉得异常不能给用户看,用户最多看看错误提示 --------------------编程问答-------------------- 对于楼主这种问题我直接是 在UI层写一个try-catch
然后在catch块里头写
{
        ExceptionCheckEntity entity = ExceptionCheck.Check(ex);
}
然后把这个entity进行分析 是具体的没有权限 还是 钱不够 还是底层代码错误
然后进行显示 --------------------编程问答-------------------- 我做的东西 用户的每次请求 都会有try-catch的 --------------------编程问答--------------------
引用 11 楼 jiaoshiyao 的回复:
对于楼主这种问题我直接是 在UI层写一个try-catch
然后在catch块里头写
{
        ExceptionCheckEntity entity = ExceptionCheck.Check(ex);
}
然后把这个entity进行分析 是具体的没有权限 还是 钱不够 还是底层代码错误
然后进行显示



嗯嗯~我也觉得是这样~但是公司却硬要在底层trycath一次 然后在UI层有再trycatch一次,如果调用底层cath出错弹出信息之后忘记return 的话 就直接继续执行下面的代码,这个应该是明眼人都看得出的是吧~
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,