我已經通過替換第二個變數的名稱解決了這個問題,因此這是一個低優先級的問題,但我想了解會發生什么。
我的 C# 代碼中有這種情況(變數“串列”的值為“V3”):
foreach (string entry in list.Split()){ // Loop1
...
}
string [] list_statuses = { "V1", "V2", "V3", "V4", ...};
foreach (string entry in list_statuses) { // Loop2
...
}
我期待以下行為:
- 在 Loop1 中,變數 'entry' 僅獲取值“V3”,回圈運行一次并結束。
- 在 Loop2 中,變數 'entry' 的值是“V1”、“V2”、“V3”……,回圈一直運行并結束。
重要說明:Loop1 中的變數 'entry' 與 Loop2 中的變數 'entry' 不同:Loop1
中的 'entry' 的范圍僅限于 Loop1,并且使用了一個全新的變數,盡管名稱相同在回圈 2。
令我驚訝的是,在除錯時,在 Loop2 中,該變數在不同時間獲得值“V3”,好像 C# 沒有按預期考慮該變數的范圍。
在更改第二個變數的名稱時,問題解決了,但我想了解這里發生了什么:
我對變數范圍的理解來自C/C 語言。觀察到的行為是錯誤還是 C# 和 C/C 之間的變數范圍存在差異?
哦,如果這是除錯器中的問題:我正在使用 Visual Studio Enterprise 2017 版本 15.9.44。
uj5u.com熱心網友回復:
這是除錯器中的一個怪癖:
當我在除錯器中檢查值時,該值似乎是錯誤的。
當我在螢屏上列印它時,該值似乎是正確的。
出于顯而易見的原因,我總是混淆我的代碼以隱藏我的源代碼并創建一個所謂的最小且可重現的示例。但在這種情況下,這似乎是不可能的:當我在我的程式中插入這個問題的代碼時,一切似乎都很好。
我相信這個問題可以結束,說明如果 Visual Studio 中的 C# 除錯器似乎無法在變數范圍內正常作業,這可能是由于一些奇怪的除錯器錯誤。在這種情況下,我會建議:
- 要么檢查真實行為(使用日志)
- 要么使用不同的變數名,以避免該問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/435617.html
