填充来自另一个类的对象列表

本文关键字:对象 列表 另一个 填充 | 更新日期: 2023-09-27 18:17:22

我知道这是一个基本的问题,但我现在已经挣扎了相当一段时间了。

我有一个主表单,其中我有一个List<Filenames>,我有另一个类,由主表单调用。这个类必须在我的List<Filenames>中插入一些条目。

在主格式中,我将列表初始化为:

public List<Filenames> filenamesList = new List<Filenames>();

而在另一类中,我是这样做的:

MainForm mainForm = new MainForm();
mainForm.filenamesList.Clear();
//then I have a for loop in which I perform some changes
mainForm.filenamesList.Add(new Filenames { name = "filename1", id = 1 } );
//it works until here and a new Filenames is added to the list
//then we go back to the main form

问题是现在List<Filenames>是空的。我做错了什么?

填充来自另一个类的对象列表

我有另一个由主表单

调用的类

我怀疑问题在这里:

MainForm mainForm = new MainForm();

这将创建一个新的 MainForm实例,它与调用该函数的MainForm实例不同。

我将重新设计这个,以便您调用的函数返回一个List<Filenames>(或者只是一个IEnumerable<Filenames>,不太具体),并让表单类担心填充其filenamesList属性。暴露表单的数据成员可能会很快变得混乱,因为您需要将表单的实例传递给必须使用该属性的任何对象。

像这样:

-- other class --
public IEnumerable<Filenames> GetFilenames()
{
    return new List<Filenames> { new Filenames { name = "filename1", id = 1 } };
}
--MainForm--
this.filenamesList.Clear();
this.filenamesList.AddRange(otherclass.GetFilenames());

在第二种形式中:

MainForm mainForm = new MainForm();

您已经创建了一个全新的MainForm实例,它没有引用原始MainForm实例中的列表。您正在清空列表并向其中添加项目,但是当您退出第二个表单时,这些项目就丢失了。

您必须将原始MainForm实例传递给打开的新表单:

public class Form2 : Form
{
    private MainForm mainForm;
    public Form2(MainForm mainForm)
    {
        this.mainForm = mainForm;
    }
    public void SomeMethodThatUpdatesFileNamesList()
    {
        mainForm.filenamesList.Clear();
        ...
    }
}

通过使用MainForm mainForm = new MainForm();行声明新的MainForm,您没有引用相同的filenamesList。您需要获得对第一个类的引用,方法是将filenamesList作为参数发送给函数,或者将其作为属性添加到其中一个类中。

如果"other class"是主窗体的子窗体,你可能能够获得父对象的引用,但这取决于程序的结构。