为什么我的get set实现会给出一个我无法捕获的堆栈错误?

时间:2012-08-25 09:41:21

标签: c#

我有以下内容:

    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上有一个调试点;但它不会去那里。

1 个答案:

答案 0 :(得分:4)

问题在于Visual Studio调试器,默认情况下启用“启用我的代码”选项。在您的情况下,您没有处理您的代码,但反射代码正在开始。

如果您直接从Windows资源管理器运行应用程序,您将看到没有任何错误,并且正确处理了异常。

可以在http://msdn.microsoft.com/en-us/library/038tzxdw%28v=vs.100%29.aspx找到更多信息,可以在https://stackoverflow.com/a/2831236/146205找到更详细答案的类似帖子。