入力に応じていくつかの例外をスローする可能性があるコードのユニットテストを行っていました。だから私は以下のコードのようなものを試してみました:(たとえば簡体字)C#で一般的な例外を検出できないのはなぜですか?
static void Main(string[] args)
{
RunTest<ArgumentException>();
}
static void RunTest<T>() where T : Exception, new()
{
try
{
throw new T();
//throw new ArgumentException(); <-- Doesn't work either
}
catch (T tex)
{
Console.WriteLine("Caught passed in exception type");
}
catch (Exception ex)
{
Console.WriteLine("Caught general exception");
}
Console.Read();
}
しかし、これは常に「キャッチ一般的な例外」をプリントアウトし、キャッチ(Tテックス)ハンドラは動作しません。 T()を投げるか、明示的にArgumentException()を投げるかは関係ありません。これはなぜですか?実際、私はcatch節でTを使用することさえできたことに驚いていましたが、これは可能ではないでしょうか?または、少なくともこのコンパイラがうまく動作しないという警告/エラーをコンパイラに与えますか?
私の環境はVisual Studio 2008と3.5がターゲットフレームワークです。
更新:コマンドプロンプトから直接試してみたところ、「例外が渡されました」というメッセージが表示されました。だから、これはVisual Studio内からの実行に限定されているようです。おそらく、Visual Studioホストプロセスの特異性ですか?
よりデバッガでそれを実行してやるべきことをだと、それは例外型で渡さ巻き込まプリントアウト。あなたの環境とフレームワークのバージョンの詳細を教えてください。 –
それは面白いです。私はVS2008のコンソールアプリケーションとしてそれを実行し、それは一般的な例外をキャッチ印刷されます。 –
SnippetCompiler –