winforms 为什么在访问列表的断点处停止时,只能在监 windows 口中查看该列表?

wf82jlnq  于 2022-11-30  发布在  Windows
关注(0)|答案(1)|浏览(120)

我今天晚上遇到了一个问题,我不明白为什么我不能向监 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”

ergxz8rk

ergxz8rk1#

监 windows 口使用变量的名称来解析要显示的特定对象。但这将取决于 context,可能有多个parts引用不同的列表,或者某个完全不同的对象。这就是错误告诉你的,在你停止的特定位置,parts没有解析为任何东西。
也许最好的处理方法是搜索所有使用parts的地方,并在这些地方放置断点。如果你想发现列表什么时候改变,那应该是唯一可能的选择,然后你保证能够检查列表。
另一个可能的选择是将列表赋给一个全局变量,但我不确定全局访问列表是否真的有帮助,它不会真正让你知道为什么列表被更改了,而且你可能会开始使用它做其他事情。
还要注意"make object ID"特性,该特性有时有助于区分具有相同名称的多个不同对象。

相关问题