繁体   English   中英

C# 中的 Getter/Setter 问题

[英]Getter/Setter problem in C#

我在做

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

并且单步调试器显示它在第一行停止。 在尝试这条线之后

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

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

“调试器显示它停止”是什么意思? myform是否可能是 null,或者myform.treeView1是 null?

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

哦,请不要使用您的第二个版本 - 作为副作用,分配是非常非常罕见的好主意。 我知道的唯一惯用用法是使用 IO 循环时:

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

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

因为 (_isWorking = value) 总是返回 true。 如果你要写:

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

它的工作原理如下:如果 isWorking 等于值,则禁用 treeView。 但在你的情况下 - 不

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM