2

我有以下内容:

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

4

1 回答 1

4

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

如果您要直接从 Windows 资源管理器运行应用程序,您会发现没有任何问题,并且异常得到了正确处理。

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

于 2012-08-25T09:58:56.413 回答