Проблема с получателем / установщиком в 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
равно нулю, или myform.treeView1
является нулевым?
Я не могу вспомнить, как точный порядок оценки в данном случае, но это могло бы объяснить симптомы, которые вы описываете.Однако крайне важно знать, почему отладчик "останавливается".Другая возможность заключается в том, что вы пытаетесь получить доступ к пользовательскому интерфейсу из потока, отличного от пользовательского интерфейса, что предотвратило бы назначение Enabled
от правильной работы.
О, и, пожалуйста, не используйте свою вторую версию - назначение в качестве побочного эффекта очень, очень редко бывает хорошей идеей.Единственное идиоматическое использование, которое я знаю, - это при циклическом использовании ввода-вывода:
string line;
while ( (line = reader.ReadLine()) != null)
и я считаю это приемлемым только потому, что это достаточно распространенное явление.В данном случае это действительно похоже на тебя мог бы означает "==" вместо "=".
Другие советы
Потому что (_isWorking = value) всегда возвращает значение true.Если бы вы написали:
myform.treeView1.Enabled = !(_isWorking == value);
Это работает следующим образом:если isWorking равно value, то отключите TreeView.Но в вашем случае - нет