Проблема с получателем / установщиком в C#

StackOverflow https://stackoverflow.com/questions/708866

  •  22-08-2019
  •  | 
  •  

Вопрос

Я делаю

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.Но в вашем случае - нет

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top