2

メソッドが値を返すことができるが、値が文字列ではない場合、メソッドで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?
    }
 }

例外を返す方法は?

4

3 に答える 3

2

例外のログ記録など、catchブロックで役立つ処理を実行する場合は、catchremoveブロックを試してcatchブロックから例外または例外をスローできます。throwメソッドから例外メッセージを送信し、例外をスローしたくない場合は、文字列変数を使用して、メソッドを呼び出すための例外メッセージを保持できます。

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);
于 2012-12-28T05:01:57.123 に答える
2

単に例外をスローしたい場合は、try/catchブロックを削除してください。

特定の例外を処理する場合は、2つのオプションがあります

  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;
    }
    
于 2012-12-28T05:06:18.073 に答える
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
      }
}
于 2012-12-28T05:12:50.910 に答える