myVar = false将myVar设置为true?

时间:2013-10-25 10:10:52

标签: c#

我觉得我今天早上生气了,准备自己开节,但后来又决定让别人看一段代码给我,2位同事确认我不是生气,或者我们都疯了。

我有以下代码:

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,它移动到上面代码中的最后一行,突然isStaffMember为真。 GetValidUserGroups方法此时尚未运行(并且无论如何都不会更改该值)。

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

之前有人看过这种奇怪的行为并知道可能造成什么原因吗?

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

1 个答案:

答案 0 :(得分: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);