我有以下内容:
private int order;
public int Order {
get { return order; }
set {
if ((value < 0) || (value > 99)) {
throw new Exception(string.Format("{0} must be between 0 and 99", value.ToString()));
} else {
order = value;
}
}
}
这里称为:
try {
property.SetValue(reference, convertedValue, null);
} catch (Exception e) {
var a = e;
}
当我设置值为50时,一切正常。当我将值设置为123并逐步执行调试时,它将转到property.SetValue行,然后接下来是它给了我这个并指向第一个代码片段中“} else {”代码块的结尾。
System.Exception was unhandled by user code
HResult=-2146233088
Message=123 must be between 0 and 99
Source=Test.Storage
StackTrace:
at Storage.Models.Reference.set_Order(Int32 value) in C:\Code K\139- Aug 23\Common\Storage\Models\Reference.cs:line 22
InnerException:
有人可以解释为什么不处理异常吗?我无法理解为什么它不会被包围property.SetValue的try循环所捕获。我在var a = e上有一个调试点;但它不会去那里。
答案 0 :(得分:4)
问题在于Visual Studio调试器,默认情况下启用“启用我的代码”选项。在您的情况下,您没有处理您的代码,但反射代码正在开始。
如果您直接从Windows资源管理器运行应用程序,您将看到没有任何错误,并且正确处理了异常。
可以在http://msdn.microsoft.com/en-us/library/038tzxdw%28v=vs.100%29.aspx找到更多信息,可以在https://stackoverflow.com/a/2831236/146205找到更详细答案的类似帖子。