我觉得我今天早上生气了,准备自己开节,但后来又决定让别人看一段代码给我,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。
答案 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);