我有一些代码使用反射来从对象中提取属性值.在某些情况下,属性可能会抛出异常,因为它们具有空引用等.
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
通过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,但是使用异常处理似乎更可取.有没有办法从反射方法调用中传播异常?