internal static string ReadCSVFile(string filePath)
{
try
{
...
...
}
catch(FileNotFoundException ex)
{
throw ex;
}
catch(Exception ex)
{
throw ex;
}
finally
{
...
}
}
//Reading File Contents
public void ReadFile()
{
try
{
...
ReadCSVFile(filePath);
...
}
catch(FileNotFoundException ex)
{
...
}
catch(Exception ex)
{
...
}
}
在上面的代码示例中,我有两个函数ReadFile和ReadCSVFile 在ReadCSVFile中,我得到FileNotFoundExexoon类型的异常,它被catch(FileNotFoundException)块捕获。但是当我抛出此异常以捕获ReadFile()函数的catch(FileNotFoundException)时,它会捕获catch(Exception)块而不是catch(FileNotFoundException)。而且,在调试时,ex的值表示为Object Not Initialized。如何将调用函数的异常抛出到调用函数的catch块而不会丢失内部异常或至少发出异常消息?
答案 0 :(得分:12)
您必须使用throw;
代替throw ex;
:
internal static string ReadCSVFile(string filePath)
{
try
{
...
...
}
catch(FileNotFoundException ex)
{
throw;
}
catch(Exception ex)
{
throw;
}
finally
{
...
}
}
除此之外,如果你在catch块中没有做任何事情而是重新抛出,你根本不需要catch块:
internal static string ReadCSVFile(string filePath)
{
try
{
...
...
}
finally
{
...
}
}
仅实施catch块:
当你想通过抛出一个新的异常并将捕获的异常作为内部异常时,向异常中添加其他信息:
catch(Exception exc) { throw new MessageException("Message", exc); }
您不必在异常可以通过的每个方法中实现catch块。
答案 1 :(得分:1)
只需在被调用的函数中使用throw。不要使用多种异常类型重载catch块。让来电者照顾好。
答案 2 :(得分:1)
你应该替换
throw ex;
通过
throw;
答案 3 :(得分:0)
在被调用的函数中,只需像这样使用throw
try
{
//you code
}
catch
{
throw;
}
现在,如果此处出现异常,则调用者函数将捕获此异常。
答案 4 :(得分:0)
您的代码在此工作正常,请点击此处http://ideone.com/jOlYQ