簡體   English   中英

查看它們時,Visual Studio調試值會發生變化嗎?

[英]Visual studio debug values changing when looking into them?

因此,我一直在編寫一些單元測試,並且有一個失敗的測試應該不會失敗,因此我開始調試該測試。 我瀏覽了屬性,調試完成后,測試通過了。 奇怪的? 因此,我再次運行了測試,但再次失敗了。

事實證明,當我查看屬性時,屬性(在本例中為listview-selected)實際上發生了變化,但當我不這樣做時卻沒有發生變化。

這是我制作的視頻,目的是展示這個奇怪的問題。

https://youtu.be/OsUhh-MlOoU

SelectedItems的文檔中這樣說:

如果在創建ListView句柄之前訪問了SelectedItems屬性,則該屬性將不包含任何項目。

由於您使用的是測試方法,因此我假設您實際上並沒有在需要手柄的屏幕上顯示表單或Listview。 這樣,除非強制使用,否則listview不會獲得句柄。

在調試檢查器中擴展listview對象的行為使SelectedItems屬性突然包含該元素,這向我表明ListView類型上的其他屬性之一具有觸發此句柄創建的副作用。

這是一個演示類似情況的小示例:

void Main()
{
    var x = new Test();
    Console.WriteLine(x.GoodProperty); // place a breakpoint on this line
    Console.WriteLine(x.BadProperty);
    Console.WriteLine(x.GoodProperty);
}

public class Test
{
    public int GoodProperty { get; set; }
    public int BadProperty => GoodProperty++;
}

如果在指定的行上放置一個斷點,然后使用鼠標將鼠標懸停在同一行的x.GoodProperty表達式上,則會得到0。您可以一遍又一遍地執行此操作,它仍然會產生0。

但是,每次將鼠標懸停在x.BadProperty表達式上時, x.GoodProperty也會增加1。

如果將鼠標懸停在x並將其展開以顯示所有屬性,則會發生完全相同的事情。 取決於在展開x時是首先評估GoodProperty還是BadProperty ,展開的視圖可能會或可能不會顯示更改后的GoodProperty值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM