SetValue属性反射处理问题时出现异常

本文关键字:异常 处理问题 属性 反射 SetValue | 更新日期: 2023-09-27 18:10:31

使用属性反射到SetValue时,该属性抛出TargetInvocationException。但是,由于对SetValue的调用是一个调用,因此会捕获异常,而不会在属性中进行处理。有没有办法处理属性中的Target Exception,并将其仅抛出到主程序中?

我希望这次抛出就像我只是进行了一次方法调用,而不是调用。

编辑以澄清:

我遇到的问题是,在反射类中,我收到一条调试消息,上面写着"用户代码未处理异常"。我必须"继续"调试会话,而内部异常是"真正的"异常。这只是意料之中的事吗?我不想被警告(我也不想隐藏警告(,我希望代码修复警告。

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"
        }
    }
}

SetValue属性反射处理问题时出现异常

您需要InnerException:

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

这并不是反射特有的——这是由另一个引起的任何异常的一般模式。(例如TypeInitializationException。(

对不起,还不能发表评论。两件事:1( 你为什么先在反思课上抓到前任,然后再扔?不过,这不应该是问题所在。2( 我认为你得到了你的例外。检查"异常已抛出"的内部异常。