Reflectionによるメソッド呼び出し時の例外
ちょっと嵌りました。
using System; class MyException : Exception {} class Foo { public void Bar() { throw new MyException (); } } static class Program { static void Main () { Foo foo = new Foo (); try { foo.Bar (); } catch (MyException) { Console.WriteLine ("Catch!"); } Type t = foo.GetType(); try { t.GetMethod("Bar").Invoke(foo, null); } catch (MyException) { Console.WriteLine ("Catch!"); } catch (System.Reflection.TargetInvocationException) { Console.WriteLine ("お前は誰だ!"); } } } /* 結果 Catch! お前は誰だ! */
Reflection経由だと、メソッド内で発生した例外がTargetInvocationExceptionでラップされるんですね。単体テストではOKだったコードが結合テストでNGになって悩みました。
大連のホテルからの書き込みでした。(^^;