2013-07-06 8 views
-7

다른 사람이 작성한 코드를 사용하고 있으며 setter 메서드와 관련이 있다고 생각되는 문제로 인해 붙어 있습니다. 아래 코드는 액세스가 setter 요소에 의해 제어되는 public 요소에 true 값을 할당하려고 시도합니다.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 {} 
    } 

제가 위에서 말했듯이, 나는이 setter 메소드 함께 할 수있는 뭔가가 생각합니다. 설정된 부분에 대해 아무 것도 쓰지 않으면 IsValid 변수에 값을 할당 할 수 없습니다. set {this.IsValid = value}을 쓰면 Stackoverflow 오류가 발생합니다. IsLeaf에 값을 할당하는 것이 어렵지 않아야합니다. getter/setter 메서드에 대한 자습서를 확인했지만 요점을 놓치고있는 것 같습니다.

IsValid 속성에 값을 할당 할 수 있도록 설정 메서드를 어떻게 변경해야합니까?

감사합니다.

+0

여기에 게터의 의미를 이해합니까? 어떤 대답도화물 컬트 프로그래밍의 예일 뿐이라는 것을 이해하지 못합니다. 이 문제를 "해결"할 수는 있지만 노드가 분기를 통해 유효하지 않다고 가정하면 다른 문제가 발생합니다. –

+0

@AndreyShchekin 답변을 본 후 정말 이해했습니다. 나는 나머지 부분을 적절하게 재 설계했다. – rooter

답변

1

, 그리고 만약 당신이 IsValid = true을하면 자연스럽게 동그라미가되는 것을 그 자체에 할당하게됩니다. 게터가 주변 정보에 의존하고 독립형 값이 아니기 때문에 setter를 제거해야합니다.

조건이 참인 경우 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; 
} 
관련 문제