繁体   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