0

我有List<T>一个类型为Video. 该类Video类似于以下内容:

public class Video {
  public bool IsActive { get; set; }
  public string Name { get; set; }
  private int videoID;
  public int VideoID {
    get { return videoID; }
    set {
      if (Equals(value, videoID)) return;
      videoID = value;
    }
  }
}

我有一个复杂的场景,我还不能重现,所以我不是在寻找一个确切的答案,而是一些有助于我调试的理论可能性。

设想

加载一个包含自定义的视图ListBoxMeasureOverride()已被覆盖以检查值,然后它立即调用base.MeasureOverride(). 在执行之前base.MeasureOverride(),我设置了一个 Parallel Watch 来检查VideoID列表中的任何一项上的值,这将是正确的值。比方说138向前一步,值已经“神奇地”一致地更改为其他值,158. VideoID.set永远不会命中断点。

在调试器不命中断点的情况下,如何操作对象的值?我的猜测是反射——我使用 ( fastJSON) 进行反序列化。

感谢您的任何想法。

编辑

(1)私有字段videoID只在Videoget和set的类中被引用VideoID

(2) 我的另一个嫌疑人是另一个线程中的某些东西,这可能就是为什么它似乎在视图加载后的某个持续时间发生,而不一定在代码中的任何一致点发生。base.MeasureOverride()是一个耗时的函数 [对我来说],暗示我可能离这个 bug 的根源还很远。

(3) 我还想补充一点,即使 VideoID 是自动属性,也会出现此问题。所以我不能合理地接受它与我的示例中的支持字段有任何关系。

4

1 回答 1

0

如果您使用的是 Visual Studio,请单击 videoID(后备存储小写版本)和“查找所有引用”上的光标。您的示例代码不包括 videoID 的定义,但我怀疑它是一个public而不是private......属性的后备存储通常应该是“私有的”。

查找所有引用应该查明可以直接修改 videoID 后备存储的位置,绕过您的设置器。

于 2013-10-04T14:55:34.213 回答