Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 物业';s值在内存中更改,而不点击setter_C#_Wpf - Fatal编程技术网

C# 物业';s值在内存中更改,而不点击setter

C# 物业';s值在内存中更改,而不点击setter,c#,wpf,C#,Wpf,我有一个列表,其中有一种视频。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;

我有一个
列表
,其中有一种
视频
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;
    }
  }
}
我有一个复杂的场景,我还没有能够重现,所以我不是在寻找一个确切的答案,而是一些理论上的可能性,这些可能性将帮助我进行调试

场景

加载包含自定义
列表框的视图
MeasureOverride()
已被重写以检查值,然后它立即调用
base.MeasureOverride()
。在执行
base.MeasureOverride()
之前,我设置了一个平行手表来检查列表中任何一个项目上的
VideoID
值,它将是正确的值。比如说,
138
。向前走一步,值“神奇地”持续地变为其他值,
158
。永远不会命中
VideoID.set
处的断点

在调试器未命中断点的情况下,以何种方式操作对象的值?我猜是反射-我正在使用(
fastJSON
)进行反序列化

谢谢你的任何想法

编辑 (1) 私有字段
videoID
仅在
videoID
的get和set中的
Video
类中引用

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


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

如果您使用的是Visual Studio,请单击videoID(backing store小写版本)上的光标并“查找所有引用”。您的示例代码不包括videoID的定义,但我怀疑它是
公共的
,而不是
私有的
。。。属性的备份存储通常应为“私有”


“查找所有引用”应能准确定位可能直接修改videoID备份存储的位置,绕过设置程序。

您能在一个简短但完整的程序中重现此内容吗?
videoID
是一个字段。可以想象,该字段可以在不经过setter的情况下进行修改。在我看来,您已经修改了另一个旧的
视频
;因此,
158
应该是旧的
Video
实例的
VideoID
的值。@JonSkeet我目前正在尝试这样做。这个拼图有很多块,所以我一次只添加一块。@KirkWoll我更新了我的帖子。我总共引用了3个字段
videoID
:在
get
中,在
set
中引用了两次,如上所示。抱歉,这是一个私有字段,我已经修改了帖子。即使是私有字段,也可以由定义它的类直接修改,因此,应进行检查,以查看是否进行了任何直接修改。确认在
get
set
之外的任何地方都没有在我的代码中访问它。