2013-10-25 5 views
1

나는 오늘 아침에 화를 내며 나 자신을 생각하려고했으나 다른 누군가에게 나를위한 코드 조각을 살펴보기로 결정했다. 2 명의 동료는 내가 화를 내지 않았다고 확인했다. 우리는 모두 화가났다.myVar = false myVar를 true로 설정 하시겠습니까?

bool isStaffMember = false; 

using (var uam = new ReadOnlyADUserAccountManager(adUser.Domain.ShortName)) 
{ 
    var props = uam.GetLocalUserProperties(adUser, new string[] { "IsStaff" }); 
    if (props.Count > 0 && props.ContainsKey("IsStaff") && props["IsStaff"] != null && props["IsStaff"].Value.ToString() == "1") 
     isStaffMember = true; 
    else 
     isStaffMember = false; 
} 

var validGroups = GetValidUserGroups(adUser.Sid); 

나는 시간이 코드의 마지막 줄에 도달하여 isStaffMember이 항상 true 것을 발견 어떤 이유 :

나는 다음과 같은 코드를 가지고있다. 그래서 몇 가지 중점을 둡니다.

단계별로 살펴보면 isStaffMember는 기본값 "false"로 유지되며 "isStaffMember = false;"행에 도달 할 때까지 false로 유지됩니다. 이제, 나에게 이것은 상당히 확실하다. isStaffMember를 false로 설정한다. (또는 이미 false로 남겨둔다.) 그러나 아니요, 해당 줄의 중단 점을 사용하여 F10을 누르고 위 코드의 마지막 줄로 이동하면 갑자기 isStaffMember가 true입니다. GetValidUserGroups 메서드는이 시점에서 실행되지 않았으므로 값을 변경하지 않습니다.

isStaffMember = false가 isStaffMember가 true가되는 이유는 약간 혼란 스럽습니다.

누구나이 기괴한 행동을 보았고 원인을 알 수 있습니까?

즉각적인 창에 isStaffMember = false를 입력하면이 값이 작동하고 false로 설정됩니다.

+2

이 코드는 멀티 쓰레드? –

+0

이 코드는 어디에 실행되며 어떻게 디버깅합니까? 나는. 실행중인 코드가 디버깅되고 있습니까? – CodeCaster

+0

디버거가 현재 행을보다 쉽게 ​​읽을 수 있도록 중괄호를 추가하십시오. – BartoszKP

답변

2

디버거가 전체 if 문에 대한 중단 점을 설정할 가능성이 있습니까?

이 당신의 구현을 변경하여 테스트 할 수

bool isStaffMember = false; 

using (var uam = new ReadOnlyADUserAccountManager(adUser.Domain.ShortName)) 
{ 
    var props = uam.GetLocalUserProperties(adUser, new string[] { "IsStaff" }); 
    var shouldBeStaffMember = props.Count > 0 && props.ContainsKey("IsStaff") 
      && props["IsStaff"] != null && props["IsStaff"].Value.ToString() == "1"; 

    //add breakpoint here 
    isStaffMember = shouldBeStaffMember; 
} 

var validGroups = GetValidUserGroups(adUser.Sid); 
+0

아, 그 트릭을 마쳤습니다. 고마워요. 정말 이상합니다. 모든 답장을 보내 주셔서 감사합니다 :) – user676437

+0

나는 일시적으로 되돌려 놓고 (누군가 다른 사람이 제안한 것처럼) 어떤 중괄호를 붙이면됩니다. (분명히 깨끗하기는하지만 다시 그것). – user676437

+0

if 문의 각 부분 주위에 중괄호를 두었지만 두 번째 부분은 계속되지만 true로 설정합니다. 정말 이상해. – user676437

관련 문제