c#如何在函数返回时同时抛出异常

aqjy 2008-12-14 08:01:22
例有如下函数:
public int DeleteFile(string fileName)
{
try
{
File.Delete(fileName);
return 0;
}
catch (Exception ee)
{
throw ee;
return 1;
}
}
编译提示 return 1无效(若先 return 1; 再 throw ee,编译提示 throw ee无效)而我希望在发生异常时,既能返回数值1,又能在调用该函数的父函数中处理异常,该怎么做?
...全文
883 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lby1988530 2010-02-04
  • 打赏
  • 举报
回复
学习了!!
孤帆远影_q 2008-12-15
  • 打赏
  • 举报
回复
public string ErrStrings="";

public int DeleteFile(string fileName)
{
try
{
ErrStrings="";
File.Delete(fileName);
ErrStrings="文件删除完成!";
return 0;
}
catch (Exception ee)
{
ErrStrings= ee.Message;
return 1;
}
}

调用后读取ErrStrings来显示。
aladdinty 2008-12-14
  • 打赏
  • 举报
回复
你用out吧。。。
烈火蜓蜻 2008-12-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 aqjy 的帖子:]
例有如下函数:
public int DeleteFile(string fileName)
{
try
{
File.Delete(fileName);
return 0;
}
catch (Exception ee)
{
throw ee;
return 1;
}
}
编译提示 return 1无效(若先 return 1; 再 throw ee,编…
[/Quote]

这是不可能的,抛出的异常就是中断程序的运行,所以先抛的话,就不可能return,如果先return的话,因为return已经终止的函数的逻辑,你就不可能再throw异常,从语法上这是不可能实现的功能,其实你的这种需求,是矛盾的,也是变态的

因为return 1 你就知道 他是发生了异常,
因为throw ex 你就知道 他是返回了1

如果你不需要异常的信息,你就用 return 1,
如果你即需要异常信息,又需要1,那么你可以在上一层try{}catch这个异常,然后,再把这个1赋值给调用处的赋值语句
xiaosanaiqinga 2008-12-14
  • 打赏
  • 举报
回复
学习!
pztx1992 2008-12-14
  • 打赏
  • 举报
回复
其实当结果为1的时候就知道发生了异常,如果非要知道,那么你可以用个out Execption 把catch的那个Execption传出去就可以了 ref也行
flyjimi 2008-12-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 flyjimi 的回复:]
1楼,2楼,这样的编译都过不去。
楼主是想要在出现异常的时候,抛出异常同时return一个值?这个想法不现实。return 和你的throw是不会同时执行到的。
应该是 要么抛异常,要么返回值。只能是“或”。
[/Quote]
回错了,这帖子好像发了两遍。1楼能编译过。这个1楼不同于那个1楼。
龙宜坡 2008-12-14
  • 打赏
  • 举报
回复
看来用ref或out参数的时候到了
flyjimi 2008-12-14
  • 打赏
  • 举报
回复
1楼,2楼,这样的编译都过不去。
楼主是想要在出现异常的时候,抛出异常同时return一个值?这个想法不现实。return 和你的throw是不会同时执行到的。
应该是 要么抛异常,要么返回值。只能是“或”。
aqjy 2008-12-14
  • 打赏
  • 举报
回复
to:lvfeng19806001
public int DeleteFile(string fileName)
{
int i;
try
{
File.Delete(fileName);
i=0;
}
catch (Exception ee)
{
i=1;
throw ee;

}
finally{
return i;
}
}
编译后有错误,“控制不能离开finally主体"
lvfeng19806001 2008-12-14
  • 打赏
  • 举报
回复
public int DeleteFile(string fileName)
{
int i;
try
{
File.Delete(fileName);
i=0;
}
catch (Exception ee)
{
i=1;
throw ee;

}
finally{
return i;
}
}
pztx1992 2008-12-14
  • 打赏
  • 举报
回复
try
{
File.Delete(fileName);
return 0;
}
catch (Exception ee)
{
//throw ee;不就行了 ?
return 1;
}

110,537

社区成员

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

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

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