我有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;
}
}
}
我有一个复杂的场景,我还不能重现,所以我不是在寻找一个确切的答案,而是一些有助于我调试的理论可能性。
设想
加载一个包含自定义的视图ListBox
。MeasureOverride()
已被覆盖以检查值,然后它立即调用base.MeasureOverride()
. 在执行之前base.MeasureOverride()
,我设置了一个 Parallel Watch 来检查VideoID
列表中的任何一项上的值,这将是正确的值。比方说138
。向前一步,值已经“神奇地”一致地更改为其他值,158
. VideoID.set
永远不会命中断点。
在调试器不命中断点的情况下,如何操作对象的值?我的猜测是反射——我使用 ( fastJSON
) 进行反序列化。
感谢您的任何想法。
编辑
(1)私有字段videoID
只在Video
get和set的类中被引用VideoID
(2) 我的另一个嫌疑人是另一个线程中的某些东西,这可能就是为什么它似乎在视图加载后的某个持续时间发生,而不一定在代码中的任何一致点发生。base.MeasureOverride()
是一个耗时的函数 [对我来说],暗示我可能离这个 bug 的根源还很远。
(3) 我还想补充一点,即使 VideoID 是自动属性,也会出现此问题。所以我不能合理地接受它与我的示例中的支持字段有任何关系。