2013-10-25 95 views
1

我以为我今天早上生气了,正准备开始自我剖析,但后来决定让其他人来看看我的一段代码,有两位同事证实我没有生气,或者我们都疯了。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是总是如此。所以我放了一些断点。

单步执行时,isStaffMember保持为默认值false,直到它到达“isStaffMember = false;”行的位置。现在,对我来说,我应该相当肯定,将isStaffMember设置为false(或者将它保留为假)。但是,不,在该行的断点处,我打了F10,它移到了上面代码的最后一行,突然间是sffff成员是真的。 GetValidUserGroups方法在此时尚未运行(并且不会更改该值)。

我为什么isStaffMember = false原因isStaffMember变得真实,我有些困惑。

任何人都看过这种奇怪的行为之前,并知道可能是什么原因造成的?

如果我将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

相关问题