C#中的Getter / Setter问题

时间:2009-04-02 08:53:21

标签: c# setter

我在做

static bool isWorking
    {
        get { return _isWorking; }
        set {
            myform.treeView1.Enabled = !value;
            _isWorking = value;
        }
    }

并单步调试显示它在第一个设置行停止。 尝试此行后

set { myform.treeView1.Enabled = !(_isWorking = value); }

我看到isWorking已设置,但myform.treeView1.Enabled未设置。怎么回事?

2 个答案:

答案 0 :(得分:9)

“调试器显示停止”是什么意思?是myform可能为空,还是myform.treeView1为空?

在这种情况下,我不记得完全评估顺序,但它可以解释您所描述的症状。知道为什么调试器“停止”是至关重要的。另一种可能性是您尝试从非UI线程访问UI,这将阻止分配给Enabled正常工作。

哦,请不要使用你的第二个版本 - 作为副作用的任务非常非常不是一个好主意。我所知道的唯一惯用方法是使用IO循环:

string line;
while ( (line = reader.ReadLine()) != null)

我认为这是可以接受的,因为它相当普遍。在这种情况下,它看起来像你可以意味着“==”而不是“=”。

答案 1 :(得分:-2)

因为(_isWorking = value)返回true。如果你愿意写:

myform.treeView1.Enabled = !(_isWorking == value);

它的工作方式如下:如果isWorking等于value,则禁用treeView。但在你的情况下 - 没有