相关疑难解决方法(0)

为什么IDE会将TargetInvocationException视为未捕获?

我有一些代码使用反射来从对象中提取属性值.在某些情况下,属性可能会抛出异常,因为它们具有空引用等.

object result;
try
{
    result = propertyInfo.GetValue(target, null);

}
catch (TargetInvocationException ex)
{
    result = ex.InnerException.Message;
}
catch (Exception ex)
{
    result = ex.Message;
}
Run Code Online (Sandbox Code Playgroud)

最终代码正常工作,但是当我在调试器下运行时:

当属性抛出异常时,IDE将进入调试器,就好像异常未被捕获一样.如果我刚刚运行,程序就会流出,异常作为TargetInvocationException出现,并在InnerException属性中有真正的异常.

我怎么能阻止这种情况发生?

c# reflection exception propertyinfo targetinvocationexception

25
推荐指数
1
解决办法
2万
查看次数

异常不会从c#中的反射方法调用传播

通过methodInfo.Invoke调用方法时,如果抛出异常,它似乎不会传播到我的catch块.

object value;
try
{
    value = myMethod.Invoke(null, parameters);//program crashes with uncaught exception
}
catch
{
    throw new Exception("Caught!");//never executed
}
Run Code Online (Sandbox Code Playgroud)

这个方法引发的特殊例外是KeyNotFoundException,但这应该不重要,因为我抓住了一切正确的东西

我从Visual Studio获得的特定错误消息是

KeyNotFoundException was unhandled by user code
Run Code Online (Sandbox Code Playgroud)

而通常消息会说

KeyNotFoundException was unhandled
Run Code Online (Sandbox Code Playgroud)

如果调用不是反射调用.

我可以让方法检查它们是否在那里,如果没有返回null,但是使用异常处理似乎更可取.有没有办法从反射方法调用中传播异常?

c# reflection visual-studio

8
推荐指数
1
解决办法
1813
查看次数