C# 如何将泛型列表作为构造函数传递?

C# 如何将泛型列表作为构造函数传递?,c#,winforms,arraylist,.net-3.5,C#,Winforms,Arraylist,.net 3.5,我是C#的新手。我来自爪哇 在Java中,我通常在构造函数中传递带有数据类型的ArrayList。 在C#中,ArrayList似乎不能采用数据类型,而只有List可以采用 所以我有这个表格,它是从其他表格中取出来的 namespace Test { public partial class Form2 : Form { private List<TestData> list; public Form2 (List<TestDa

我是C#的新手。我来自爪哇

在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;
        }
    }
}
名称空间测试
{
公共部分类表单2:表单
{
私人名单;
公共表格2(列表_列表)
{
初始化组件();
this.list=\u list;
}
}
}
如果我那样做了,我会犯这样的错误

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

我尝试将私有列表更改为公共列表,但我遇到了更多错误

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

如果我将列表更改为ArrayList。它起作用了。 在C#?

命名空间测试中,是否无法将列表放入构造函数中
{
公共部分类表单2:表单
{
私人名单(private List);;
公共表格2(列表)
{
初始化组件();
这个._list=list;
}
}
}

检查“TestData”是私有的还是公共的,并按照上述代码重命名私有变量

我认为问题不在于类
Form2
。看起来不错。错误消息说,
不一致的可访问性:…
并且您正在这里访问类
TestData
。因此,您必须检查
TestData
的定义,并确认它定义为
公共类TestData

您需要将
TestData
更改为公共类

public class TestData
{

}
如果
TestData
internal
(如果您编写了
类TestData
,则为默认值)或
private
,这意味着它比公共构造函数更难访问,这就是您正在读取的错误


因此,任何人都可以使用受限制的类型访问构造函数。这是不允许的。

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

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; }
    }
}
使用System.Collections.Generic;
使用System.Windows.Forms;
命名空间Windows窗体应用程序1
{
公共部分类Form1:Form
{
私有财产清单;
公共表格1()
{
初始化组件();
}
公共表格1(估价清单)
{
_财产=估价单;
初始化组件();
}
}
公开课考试
{
公共int Id{get;set;}
私有字符串名称{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>());
        }
    }
}
使用System.Collections.Generic;
使用System.Windows.Forms;
命名空间Windows窗体应用程序1
{
公共部分类表单2:表单
{
公共表格2()
{
初始化组件();
//默认构造函数。
新表格1();
//第二名承包商。
新表格1(新列表());
}
}
}

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

检查“TestData”是私有的还是公共的谢谢!我不知道默认情况下该类不是“public”。我稍后会接受答案:)你确定
List
导致了一个问题。正如我看到的,上面的代码工作得非常好。除了一个次要的命名约定外,没有问题。检查
TestData
class及其使用的属性是否可访问。
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>());
        }
    }
}