2013-07-06 3 views
-7

Я работаю над кодом, написанным кем-то другим, и застревает из-за проблемы, которая, как я думаю, имеет отношение к методу setter. Код ниже пытается присвоить истинное значение публичному элементу, доступ которого контролируется элементом setter.C# Setter не назначает

 while (true) 
     { 
      currentN = currentN.Pass(d); 
      if (currentN.NID == aimedID) 
      { 
       currentN.IsValid = true; 
       break; 
      } 
     } 

Когда я отладки кода, это невероятно для меня, чтобы увидеть даже в тех случаях, он входит в если условие, оно не присваивает истинное значение для currentNode.IsValid переменной. Он остается таким, каким он был до (ложным).

методы геттер/сеттер приведены ниже:

public bool IsValid 
    { 
     get { return Branches == null || Branches.Length == 0; } 
     set {} 
    } 

Как я уже говорил выше, я думаю, что это имеет какое-то отношение к методу сеттер. Если я не пишу ничего для заданной части, я не могу присвоить значение переменной IsValid. Если я напишу set {this.IsValid = value}, он завершит ошибку stackoverflow. Назначение значения для IsLeaf не должно быть таким сложным. Наверное, мне не хватает точки, хотя я проверил несколько руководств по методам getter/setter.

Как изменить способ установки, чтобы я мог присвоить значение свойству IsValid?

Спасибо.

+0

Вы понимаете смысл геттера здесь? Не понимая, что любой ответ будет всего лишь примером программирования культа груза. Это можно «решить», но если узел не должен быть действительным с ветвями, то что-то другое сломается. –

+0

@AndreyShchekin Я действительно понял, увидев ответ. Я переделал остальных соответственно. – rooter

ответ

1

Это потому, что вы не делаете абсолютно ничего в инкубаторе, и если вы делаете IsValid = true, тогда вы присваиваете вещь себе, что естественно идет в кругах. Вы должны удалить сеттер, поскольку геттер использует периферийную информацию и не является автономным значением.

Для того, чтобы это было так, Branches нуждается в некоторых товарах.

+0

Это то, что я искал. Это сработало! Благодаря! – rooter

0

Как правило, вы не хотите устанавливать значение для свойства IsValid, поскольку оно предназначено для чтения, а не для установки. Просто оставить из set {} аксессор, вам не нужно:

public bool IsValid 
{ 
    get { return Branches == null || Branches.Length == 0; } 
} 

Вы также можете инкапсулировать логику валидации метода:

public bool IsValid() 
{ 
    return Branches == null || Branches.Length == 0; 
} 
Смежные вопросы