如何将通用列表作为构造函数传递?
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
{
}
如果 TestData
是 internal
(如果您写 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。
我是 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
{
}
如果 TestData
是 internal
(如果您写 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。