-3

これは、C#では理解できない奇妙なシナリオです。

try
{
    Call to database.
    If results from database are empty
          throw new Exception("No results");
}
catch(Exception ex)
{
    if (ex.Message.Equals("No results"))
        throw;
    else
        throw new Exception("Exception from database");
}

正しく、出力は次のようになります。Exception ("No results")

ただし、現時点では、2つの例外、つまりException("No results")とをスローし続けException("Exception from database")ます。

更新:内部例外として「ex」をスローしようとしました。したがって、「throw new Exception("Exception from database", ex)」です。exは実際には'であることがわかりException("No results")ます。

なぜこれが起こっているのか誰かが私に説明できますか?

ありがとう!

PS:上記を少し調整しました。今より明確になることを願っています。その「スロー」は「リターン」ではありません。用語の誤用についてお詫びします。

4

2 に答える 2

1

データベースへの呼び出し時 (またはデータベースからの結果の処理時) に例外があります。

ところで、データベースにデータが見つからない場合、例外的な状況になることはめったにありません。null または空のコレクションを返すだけです。

Foo GetFooById(int id)
{
   try
   {
       Call to database.
       If results from database are empty
          return null;
   }
   catch(SqlException ex)
   {   
      throw new MyDataAccessException("Cannot find foo", ex);
   }
}

もう 1 つのアドバイス - フロー制御に例外を使用しないでください。

于 2012-05-22T07:18:15.027 に答える
-1

あなたのコード スニペットからは 100% 確信が持てませんが、「2 つの」例外があるように見える理由は、おそらく元の例外を再スローしているようです。

C# での「throw ex」(通常のケース) と「throw」の違いについては、このリンクを参照してください。

http://geekswithblogs.net/sdorman/archive/2007/08/20/Difference-before-quotthrowquot-and-quotthrow-exquot-in-.NET.aspx

于 2012-05-22T07:15:17.807 に答える