我有一个自定义控件,其中一个属性是:
public List<SelectionBox> Boxes { get; set; }
在控件构造函数中,我有:
this.Boxes = new List<SelectionBox>();
this.Boxes.Add(new SelectionBox("", Color.Red));
在InitializeComponent()之前,如果我在这里做一个断点,它会显示Boxes是一个包含1个元素的SelectionBox列表。但是在我的OnPaint覆盖内部,如果我执行以下操作,它已被设置为null,并且有一些奇怪的行为:
foreach (SelectionBox box in Boxes) {}
它不会抛出错误它只是退出函数。我做错了什么?
选择框结构:
[Serializable]
public struct SelectionBox
{
public string Name;
public Color Colour;
public Rectangle BoxRectangle;
public bool IsActive;
public SelectionBox(string name, Color colour)
{
this.Name = name;
this.Colour = colour;
this.IsActive = false;
this.BoxRectangle = new Rectangle(0, 0, 0, 0);
}
}
答案 0 :(得分:1)
如果你需要追踪属性如何神秘地将其值设置为null,请使用显式get / set实现重写属性,在setter中删除断点,并在遇到断点时检出callstack
private List<SelectionBox> _boxes;
public List<SelectionBox> Boxes { get { return _boxes; } set { _boxes = value; } }