2013-10-25 98 views
1

我以爲我今天早上生氣了,正準備開始自我剖析,但後來決定讓其他人來看看我的一段代碼,有兩位同事證實我沒有生氣,或者我們都瘋了。myVar = false將myVar設置爲true?

我有下面的代碼:

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,它移到了上面代碼的最後一行,突然間是sffff成員是真的。 GetValidUserGroups方法在此時尚未運行(並且不會更改該值)。

我爲什麼isStaffMember = false原因isStaffMember變得真實,我有些困惑。

任何人都看過這種奇怪的行爲之前,並知道可能是什麼原因造成的?

如果我將isStaffMember = false鍵入它的工作立即窗口,並將其設置爲false。

+2

這是多線程的代碼? –

+0

這段代碼在哪裏運行,你如何調試它?即被調試的代碼正在運行的代碼? – CodeCaster

+0

添加大括號,以便調試器以更易讀的方式標記當前行。 – BartoszKP

回答

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); 
+0

啊,這是做的伎倆,謝謝。真奇怪。 感謝所有的回覆:) – user676437

+0

我將不得不臨時恢復它,並在一些大括號(如其他人所建議的)只是爲了弄清楚發生了什麼事情(雖然這顯然更清潔,所以會回去使用它)。 – user676437

+0

我在if語句的每個部分放了一些大括號,它仍然進入第二部分,但將其設置爲true。真奇怪。 – user676437

相關問題