0

プロパティ リフレクションを SetValue に使用すると、プロパティは TargetInvocationException をスローします。ただし、SetValue の呼び出しは呼び出しであるため、例外はキャッチされ、プロパティで処理されません。プロパティでターゲット例外を処理し、メイン プログラムでのみスローする方法はありますか?

このスローを、呼び出しではなく、メソッド呼び出しを行ったかのようにしたいのです。

明確にするために編集:

私が抱えている問題は、リフレクト クラス内で、「ユーザー コードによって例外が処理されませんでした」というデバッグ メッセージが表示されることです。デバッグセッションを「続行」する必要があり、内部例外は「実際の」例外です。これは当然のことでしょうか?警告を受け取りたくない (そして警告を非表示にしたくない)、コードで警告を修正したい。

public class reflect
{
    private int _i;
    public int i
    {
        get { return _i; }
        set 
        { 
            try{throw new Exception("THROWN");}
            catch (Exception ex)
            { // Caught here ex.Message is "THROWN"
                throw ex; // Unhandled exception error DONT WANT THIS
            } 
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        reflect r = new reflect();
        try
        {
            r.GetType().GetProperty("i").SetValue(r, 3, null);
        }
        catch(Exception ex)
        { // Caught here, Message "Exception has been thrown by the target of an invocation"
            // InnerMessage "THROWN"
            // WANT THIS Exception, but I want the Message to be "THROWN"
        }
    }
}
4

2 に答える 2

2

以下が必要ですInnerException

catch(Exception ex)
{
    if (ex.InnerException != null)
    {
        Console.WriteLine(ex.InnerException.Message);
    }
}

これはリフレクションに固有のものではありません。これは、別の例外によって引き起こされた例外の一般的なパターンです。(TypeInitializationException例えば。)

于 2014-06-26T20:45:43.237 に答える
0

申し訳ありませんが、まだコメントできません。2 つのこと: 1) リフレクション クラスで最初に ex をキャッチしてから、もう一度スローするのはなぜですか? ただし、これは問題ではないはずです。2) 例外が発生していると思います。「例外がスローされました」の内部例外を確認してください。

于 2014-06-26T20:48:53.337 に答える