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

时间:2016-06-21 05:15:32

标签: c# winforms arraylist .net-3.5

我是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;
        }
    }
}

如果我这样做,我会收到像

这样的错误
  

可访问性不一致:参数类型不易访问..

我已尝试将私人列表更改为公开,但我收到了更多错误

  

可访问性不一致:字段类型不易访问..

如果我将List更改为ArrayList。它正在工作。 是不可能将List放在C#的构造函数中?

4 个答案:

答案 0 :(得分:2)

我认为问题不在于班级Form2。看起来很好。错误消息显示Inconsistent accessibility:..,您正在此处访问类TestData。因此,您必须检查TestData的定义并确认其定义为public class TestData

答案 1 :(得分:1)

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

检查'TestData'是私有还是公共,并重命名私有变量,如上面的代码

答案 2 :(得分:1)

您需要将TestData更改为公开

public class TestData
{

}

如果TestDatainternal(默认情况下,如果您写了class TestData)或private,则表示不太容易访问比构造函数<是公开的,这是你正在阅读的错误。

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

答案 3 :(得分:0)

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

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>());
        }
    }
}

提示:测试类必须是公共类。