将属性设置为某个属性后,属性设置为null?

时间:2012-12-16 04:16:12

标签: c#

我有一个自定义控件,其中一个属性是:

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);
    }
}

1 个答案:

答案 0 :(得分:1)

如果你需要追踪属性如何神秘地将其值设置为null,请使用显式get / set实现重写属性,在setter中删除断点,并在遇到断点时检出callstack

private List<SelectionBox> _boxes;
public List<SelectionBox> Boxes { get { return _boxes; } set { _boxes = value; } }