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 が常に true であることがわかりました。だから私はいくつかのブレークポイントを入れました。

ステップスルーすると、行「isStaffMember = false;」に到達するまで、isStaffMember はデフォルト値の false のままです。さて、私にとっては、isStaffMember を false に設定する (または、以前と同じように false のままにする) ことはかなり確実です。しかし、いいえ、その行にブレークポイントがある状態で F10 キーを押すと、上記のコードの最後の行に移動し、突然 isStaffMember が true になります。この時点では、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 に答える