6

私は次のコードを持っています:

[Serializable]
    class ExceptionAspectHandler:OnExceptionAspect
    {
        public override void OnException(MethodExecutionArgs args)
        {
            Console.WriteLine("{0}", args.Exception);
            args.FlowBehavior = FlowBehavior.Continue;
        }
    }

    [OnExceptionAspect]
    public static void divide()
            {
                int n = Convert.ToInt32(Console.ReadLine());
                var a = 100 / n; //the exception happens here
                Console.WriteLine("it should get here");
            }

FlowBehavior.Continueを使用すると、divide()が終了し、main()メソッドに戻ります。

4

2 に答える 2

5

OnException アスペクトはコードを try/catch でラップするため、コードは (再スローするのではなく) catch から続行され、その動作はデフォルトで戻ります。例外をスローした場所から続行したいですか?その場合は、try/catch でその行を明示的にラップする必要があります。

詳細については、 http://www.sharpcrafters.com/blog/post/Day-6-Your-code-after-PostSharp.aspxを参照してください。

于 2012-05-11T14:33:38.463 に答える
0

divide() メソッドで使用される属性は、OnExceptionAspect ではなく、(作成した) ExceptionAspectHandler である必要があります。

于 2013-02-15T17:20:58.393 に答える