今晚我遇到了一个问题,我不明白为什么我不能在观察窗口添加一个列表。
下列最小可重复示例出现问题。
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"该特性有时有助于区分具有相同名称的多个不同对象。