我是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#的构造函数中?
答案 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
{
}
如果TestData
为internal
(默认情况下,如果您写了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>());
}
}
}
提示:测试类必须是公共类。