C#中的Getter/Setter问题

2 c# setter

我在做

static bool isWorking
    {
        get { return _isWorking; }
        set {
            myform.treeView1.Enabled = !value;
            _isWorking = value;
        }
    }
Run Code Online (Sandbox Code Playgroud)

并单步执行调试器显示它在第一个设置行停止.之后尝试这一行

set { myform.treeView1.Enabled = !(_isWorking = value); }
Run Code Online (Sandbox Code Playgroud)

我看到isWorking已设置但是myform.treeView1.Enabled不是.这是怎么回事?

Jon*_*eet 9

"调试器显示停止"是什么意思?可能myform是null,还是myform.treeView1null?

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

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

string line;
while ( (line = reader.ReadLine()) != null)
Run Code Online (Sandbox Code Playgroud)

我认为这是可以接受的,因为它是相当普遍的.在这种情况下,它看起来真的可能意味着"=="而不是"=".