我今天晚上遇到了一个问题,我不明白为什么我不能向监 windows 口添加列表。
以下最小可重现示例出现此问题。
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
添加到监 windows 口中,在跳过这一行之后,可以看到parts
填充了数百个从SQL数据库中提取的条目。如果我继续运行应用程序并暂停,我将看不到列表内容。同样,如果我不添加此断点,当我将parts
添加到watch窗口时,watch显示以下错误:
部件错误CS0103:当前上下文中不存在名称“parts”
1条答案
按热度按时间ergxz8rk1#
监 windows 口使用变量的名称来解析要显示的特定对象。但这将取决于 context,可能有多个
parts
引用不同的列表,或者某个完全不同的对象。这就是错误告诉你的,在你停止的特定位置,parts
没有解析为任何东西。也许最好的处理方法是搜索所有使用
parts
的地方,并在这些地方放置断点。如果你想发现列表什么时候改变,那应该是唯一可能的选择,然后你保证能够检查列表。另一个可能的选择是将列表赋给一个全局变量,但我不确定全局访问列表是否真的有帮助,它不会真正让你知道为什么列表被更改了,而且你可能会开始使用它做其他事情。
还要注意"make object ID"特性,该特性有时有助于区分具有相同名称的多个不同对象。