C# myVar=false是否将myVar设置为true?

C# myVar=false是否将myVar设置为true?,c#,C#,我以为今天早上我要发疯了,正要把自己剖分出来,但后来我决定让别人帮我看一段代码,两位同事证实了要么我没有发疯,要么我们都发疯了 我有以下代码: bool isStaffMember = false; using (var uam = new ReadOnlyADUserAccountManager(adUser.Domain.ShortName)) { var props = uam.GetLocalUserProperties(adUser, new string[] { "IsSt

我以为今天早上我要发疯了,正要把自己剖分出来,但后来我决定让别人帮我看一段代码,两位同事证实了要么我没有发疯,要么我们都发疯了

我有以下代码:

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(或者让它保持原来的false)。但是没有,当断点在那一行时,我点击F10,它移动到上面代码中的最后一行,突然isStaffMember为真。GetValidUserGroups方法此时尚未运行(并且不会更改该值)

为什么isStaffMember=false会导致isStaffMember变为true,我有点困惑

有人以前见过这种奇怪的行为,知道是什么原因造成的吗


如果我在即时窗口中键入isStaffMember=false,它将工作,并将其设置为false

调试器是否可能正在为整个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);

这段代码是多线程的吗?这段代码在哪里运行?您如何调试它?例如,正在调试的代码是正在运行的代码吗?添加大括号,以便调试器以更可读的方式标记当前行。是的。但是,其他线程将不会处理与其启动时相同的代码,因为它会设置任务的状态,以便在任务完成之前无法再次运行。该代码通过Visual Studio 2010在我的本地计算机上运行,我正在使用F5键进行调试,因此它肯定就是该代码。啊,这就完成了,谢谢。真奇怪。感谢所有的回复:)我将不得不暂时恢复它,并插入一些大括号(如其他人所建议的),以了解发生了什么(虽然这显然更干净,所以我们将继续使用它)。我在if语句的每个部分都放了一些大括号,它仍然会进入第二部分,但会设置为true。真奇怪。