myVar = 将 myVar 设置为 true

本文关键字:myVar true 设置 | 更新日期: 2023-09-27 18:36:54

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

我对为什么 isStaffMember = false 导致 isStaffMember 变得真实感到有点困惑。

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

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

myVar = 将 myVar 设置为 true

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