为什么我只能在监视窗口中查看列表,当在访问该列表的断点上停止时?



今晚我遇到了一个问题,我不明白为什么我不能在观察窗口添加一个列表。

下列最小可重复示例出现问题。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Text;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace demo
{
public partial class formParts : Form
{
List<part> parts = new List<part>();
List<part> partChanges = new List<part>();
List<part> searchInputs = new List<part>();
public formParts()
{
InitializeComponent();
searchInputs.Add(new part());
// ...
}
// ...
private void button2_Click(object sender, EventArgs e)
{
partAccess db = new partAccess();
if (searchInputs[0].id == 0)
{
parts = db.getParts();
}
else
{
parts = db.getPart(searchInputs[0].id);
}
refreshResultsTable();
}
// ...
}
}

如果我在parts = db.getParts();上设置了一个断点,那么我可以将parts添加到监视窗口,并且在跳过这行之后,可以看到parts中填充了从SQL数据库中提取的数百个条目。如果我接着继续应用程序并暂停,我将看不到列表内容。同样,如果我不添加这个断点,当我将parts添加到监视窗口时,监视会给我这个错误:

parts错误:名称"parts"在当前上下文中不存在

观察窗口使用变量的名称来解析要显示的特定对象。但这将取决于上下文,可以有多个parts引用不同的列表,或者一些完全不同的对象。这就是错误告诉你的,在你停下来的特定位置,parts不能解析任何东西。

处理这个问题的最好方法可能是搜索所有使用parts的地方,并在这些地方设置断点。如果你想知道什么时候列表发生了变化,这应该是唯一可能的选择,然后你就可以保证能够检查列表。

另一个可能的选择可能是将您的列表分配给全局变量,但我不确定如何拥有全局可访问的列表实际上会有所帮助,它不会真正给你任何想法为什么列表被改变。你可能会开始尝试用它做其他事情。

还要注意"make object ID"该特性有时有助于区分具有相同名称的多个不同对象。

最新更新