尝试捕获异常

时间:2012-12-28 04:59:15

标签: c# .net exception-handling

我们经常在我们的方法中使用try catch语句,如果方法可以返回一个值,但是值不是字符串,如何返回异常消息? 例如:

public int GetFile(string path)
{
    int i;
    try
    {
        //...
        return i;
    }
    catch (Exception ex)
    { 
        // How to return the ex?
        // If the return type is a custom class, how to deal with it?
    }
 }

如何返回异常?

3 个答案:

答案 0 :(得分:2)

如果你想在catch块中做一些有用的事情,比如记录异常,你可以remove尝试catch块从catch块中抛出异常或throw异常。如果您想从您的方法发送异常消息并且不想抛出异常,那么您可以使用 out 字符串变量来保存调用方法的异常消息

public int GetFile(string path, out string error)
{
    error = string.Empty.
    int i;
    try
    {
        //...
        return i;
    }
    catch(Exception ex)
    { 
        error = ex.Message;
        // How to return the ex?
        // If the return type is a custom class, how to deal with it?
    }
 }

如何调用该方法。

string error = string.Empty;
GetFile("yourpath", out error);

答案 1 :(得分:2)

如果您只想抛出任何异常,请删除try / catch块。

如果您想处理特定的例外,您有两个选择

  1. 仅处理这些例外情况。

    try
    {
        //...
        return i;
    }
    catch(IOException iex)
    { 
    
        // do something
       throw;
    }
    catch(PathTooLongException pex)
    { 
    
        // do something
       throw;
    }
    
  2. 在通用处理程序中为某些类型执行某些操作

    try
    {
        //...
        return i;
    }
    catch(Exception ex)
    { 
         if (ex is IOException) 
         { 
         // do something
         }
         if (ex is PathTooLongException) 
         { 
          // do something 
    
         }
         throw;
    }
    

答案 2 :(得分:0)

你可以直接抛出异常,并从调用方法或事件中捕获异常。

public int GetFile(string path)
{
        int i;
        try
        {
            //...
            return i;
        }
        catch (Exception ex)
        { 
            throw ex;
        }
}

并在调用这样的方法中捕获...

public void callGetFile()
{
      try
      {
           int result = GetFile("your file path");
      }
      catch(exception ex)
      {
           //Catch your thrown excetion here
      }
}