1

我以为我今天早上要疯了,正要剖析自己,但后来决定让别人帮我看一段代码,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(或将其保留为 false)。但是不,在该行的断点下,我按 F10,它移动到上面代码的最后一行,突然 isStaffMember 为真。GetValidUserGroups 方法此时尚未运行(无论如何也不会更改该值)。

我对为什么 isStaffMember = false 导致 isStaffMember 变为 true 感到有些困惑。

任何人以前见过这种奇怪的行为并知道可能导致它的原因吗?

如果我在立即窗口中输入 isStaffMember = false ,它就可以工作,并将其设置为 false。

4

1 回答 1

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);
于 2013-10-25T10:17:33.677 回答