2010-04-16 2 views
0

System.Windows.Forms.Combo 상자에서 파생 된 두 단계 인 기존 클래스에서 작업하고 있습니다.VS2005 디버거가 "기본"을보고하지 않는 이유는 무엇입니까? 값이 올바 릅니까? ("왜 if 문이 실패 했나요?")

클래스 따라서 Text 속성을 무시합니다

public override string Text 
    { 
     get 
     { 
      return this.AccessibilityObject.Value; 
     } 
     set 
     { 
      if (base.Text != value) 
      { 
       base.Text = value; 
      } 
     } 
    } 

즉 "수"에 주어진 이유는이 MS의 버그입니다, 그러나 http://support.microsoft.com/kb/814346

나는 사실에 더 관심이있어 그 " "작동하지 않는 경우.

"base.Text! = value"가 true이고 F10 키를 눌러 "set"의 닫기}로 바로 이동하고 Text 속성이 변경되지 않은 경우가 있습니다.

디버거에서 값을 확인하고 조건절 중단 점을 두는 것만으로도 "if"문이 참일 때 중단됩니다.

"어떻게"잘못 될 수 있습니까?

이 항목과 ComboBox 사이의 클래스는 Text 속성을 터치하지 않습니다. 위의 버그는 실제로 아무 것도 영향을 미치지 않습니다. VS2005에서 수정되었습니다. 디버거가 프로그램 자체가 보는 것과 다른 값을 표시합니까?

업데이트

나는 내가 여기에 무슨 일이 일어나고 있는지 발견했습니다 생각합니다.

디버거가 값을 잘못보고하고 있습니다 (조건부 중단 점을 잘못 평가하는 경우 포함). 이를 확인하려면, 클래스의 다음과 같은 쌍을 시도 :

class MyBase 
{ 
    virtual public string Text 
    { 
     get 
     { 
      return "BaseText"; 
     } 
    } 
} 

class MyDerived : MyBase 
{ 
    public override string Text 
    { 
     get 
     { 
      string test = base.Text; 
      return "DerivedText"; 
     } 
    } 
} 

다음, 마지막 return 문에 중단 점을 넣어 코드 및 액세스 해당 속성을 실행합니다.

내 VS2005에서 base.Text를 가리키면 값이 "DerivedText"이지만 변수 test가 "BaseText"로 올바르게 설정되었습니다.

새로운 질문 : 왜 디버거가 제대로 기본을 처리하지 못하고 어떻게받을 수 있습니까?

+0

문제를 보여주는 간단한 자체 포함 프로그램을 제공 할 수 있습니까? 이것은 최적화 된 빌드 또는 디버그 빌드에서만 발생합니까? VS 및 .NET 런타임의 어떤 버전을 사용하고 있습니까? –

+0

이것은 .NET 2.0을 사용하는 VS2005입니다. 그것은 디버그 빌드에서 발생합니다. 프로그램을 나중에 기본 사항으로 옮기고 여전히 발생하는 경우 게시 할 것입니다. – Rawling

+0

불행히도 내가 새로운 프로젝트에 클래스를 복사하면 이런 일이 발생하지 않는다. 그래서 내 특정 클래스와 관련된 대답을 얻을 수 있을지는 모르겠다. :) 그러나 디버거에 표시된 값이 프로그램에서 보는 것과 일치하는 것처럼 보이지만 환영받을 것입니다. – Rawling

답변

0

... 그리고 this은 내 새로운 질문을 마무리한다. 아 ~.

3

문자열 비교를 위해 String.Compare을 사용하십시오. 문자열이있는 미묘함이 있습니다. 나는 왜 당신이 당신의 문자열이 실제로 '평등'하지 않을지를 알지 못하는 이유를 말할 수 없다.

+0

String.Compare를 사용하는 것과 같은 결과 - 디버거의 문자열 값은 똑같아 보이고 디버거에서 평가 된 String.Compare는 0이 아닌, if 문을 반환 할 수 있습니다. if (0! = System.String.Compare (base. 텍스트, 값)))이 제대로 작동하지 않는 것 같습니다. – Rawling

관련 문제