如何将通用列表作为构造函数传递?

How to pass generic list as constructor?

我是 C# 新手。我来自 Java.

在Java中,我通常在构造函数中传递带有数据类型的ArrayList。 C#里好像ArrayList不能带数据类型,只有List可以带。

所以我有这个表格,它从其他表格中获取列表

namespace Test
{
    public partial class Form2 : Form
    {
        private List<TestData> list;

        public Form2 (List<TestData> _list)
        {
            InitializeComponent();
            this.list = _list;
        }
    }
}

如果我这样做,我会得到类似

的错误

Inconsistent accessibility: parameter type is less accessible..

我尝试将私人列表更改为 public,但出现更多错误

Inconsistent accessibility: field type is less accessible..

如果我把List改成ArrayList。它的工作。 是不是不能把List放到C#的constructor里?

namespace Test
{
    public partial class Form2 : Form
    {
        private List<TestData> _list;
        public Form2 (List<TestData> list)
        {
            InitializeComponent();
            this._list = list;
        }
    }
}

检查 'TestData' 是私有的还是 public 并按照上面的代码重命名私有变量

我认为问题不在于 class Form2。看起来不错。错误消息显示 Inconsistent accessibility:.. 并且您正在访问此处的 class TestData。所以你必须检查 TestData 的定义并确认它被定义为 public class TestData

您需要将 TestData 更改为 public

public class TestData
{

}

如果 TestDatainternal(如果您写 class TestData 则默认)或 private,这意味着它不易访问 而不是 public 的构造函数,这是您正在阅读的错误。

所以你有一个任何人都可以使用受限类型访问的构造函数。这是不允许的。

我建议使用以下示例并与您的代码进行比较,并声明其他构造函数并使用。

using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private List<Test> _property;

        public Form1()
        {
            InitializeComponent();
        }
        public Form1(List<Test> valueList)
        {
            _property = valueList;
            InitializeComponent();
        }
    }

    public class Test
    {
        public int Id { get; set; }
        private string Name { get; set; }
    }
}

其他形式:

using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
            // Default Constractor.
            new Form1();
            // Secound Constractor.
            new Form1(new List<Test>());
        }
    }
}

提示:测试class必须是publicclass。