class 和命名空间内的 C# 列表,从另一个 class 访问它

C# List inside class and namespace, accessing it from another class

请原谅我对C#的了解不多,因为这个问题对你们中的一些人来说可能很容易,但我无法理解它。

我尝试并搜索了很多示例和教程,但它们都只是部分示例,所以我无法正确理解。

我有这个class "FilesDataStruct":

namespace MYPROJECT.FilesListData
{
    class FilesDataStruct
    {
        public int ID;
        public string Name;
    }
}

和class "FilesDataClass":

namespace MYPROJECT.FilesListData
{
    class FilesDataClass
    {
        public List<FilesDataStruct> Files;

        public FilesDataClass()
        {
            Files = new List<FilesDataStruct>();
        }
    }
}

他们使用的命名空间是“FilesListData”。

所以我转到 Class“B”在 MYPROJECT 并声明:

private FilesDataClass m_ListWorker;

然后将项目添加到我的列表中:

m_ListWorker = new FilesDataClass();

FilesDataStruct item = new FilesDataStruct();

for (int i = 0; i < 10; i++)
{
    item.ID = i;
    item.Name = "Just_Testing";

    m_ListWorker.Files.Add(item);
}

调试这个我可以看到项目已正确添加。

现在我需要在“Form1”class(或任何其他 ..)中访问此列表:

所以我再次声明:

 private FilesDataClass m_ListWorker;

但是阅读我找到的示例和教程,我已经这样做了:

m_ListWorker = new FilesDataClass(); // this is weird, if I call the class again it's normal to be empty

for (int i = 0; i < m_ListWorker.Files.Count; i++)
{
    Console.WriteLine(m_ListWorker.Files[i].ID);
    Console.WriteLine(m_ListWorker.Files[i].Name);
}

当然,那里什么也没有。我猜问题出在“FilesDataClass”的构造函数上,因为每次调用“new”时它都会变成一个新的空 class...

请向我解释我究竟做错了什么,以及我应该如何访问我的 class 以检索我想要的任何 class 中的项目...

你需要制作 B.m_ListWorker public(或者更好,public 属性)。然后你可以访问它作为 someInstanceOfB.ListWorker 如果它是实例 属性 或 B.ListWorker 如果它是静态的。

您需要传递对现有 class 的引用,而不是创建它的新实例。

public class Form1 : Form
{
    FilesDataClass m_ListWorker = null;

    public Form1(FilesDataClass f)
    {
        this.m_ListWorker = f;
    }
}

var newForm = new Form1(m_ListWorker);

你还有第二个问题。 for 循环不会像您预期的那样工作。您只需将 FilesDataStruct 的相同实例添加 10 次...最后,您有 10 个引用都将具有相同的值(您在循环的最后一次迭代中分配的值)。

m_ListWorker = new FilesDataClass();

FilesDataStruct item = new FilesDataStruct();

for (int i = 0; i < 10; i++)
{
    item.ID = i;
    item.Name = "Just_Testing";

    m_ListWorker.Files.Add(item);
}

在循环中实例化 class:

m_ListWorker = new FilesDataClass();

for (int i = 0; i < 10; i++)
{
    FilesDataStruct item = new FilesDataStruct();
    item.ID = i;
    item.Name = "Just_Testing";

    m_ListWorker.Files.Add(item);
}