繁体   English   中英

如何通过泛型列表作为构造函数?

[英]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;
        }
    }
}

如果我那样做,我会得到类似的错误

可访问性不一致:参数类型难以访问。

我尝试将私人名单更改为公开名单,但出现了更多错误

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

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

我认为问题不在类Form2 看起来不错。 错误消息指出访问TestData Inconsistent accessibility:..并且您正在此处访问类TestData 因此,您必须检查TestData的定义并确认将其定义为public class TestData

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

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

您需要将TestData更改为公开

public class TestData
{

}

如果TestDatainternal (如果您编写的class TestDataTestData则为默认值)或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; }
    }
}

其他形式:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM