在C#表单之间传递列表

时间:2013-10-05 19:13:17

标签: c# winforms list

我正在尝试学习使用构造函数在两个C#表单之间传递列表,如下所示。在我做的第一个表格上:

List<Cat> myCatList;
//list populating function...
private void btnDisplay_Click(object sender, EventArgs e)
 {
    df = new DisplayForm(myCatList);   
    df.Show();
    this.Hide();
 }

在下一个表单中,我尝试接收如下所示的数据:

List<Cat> catList; 
public DisplayForm(List<Cat> catList)
  {
     InitializeComponent();
     this.catList = catList;
  }

但我总是在第二个表单构造函数上遇到错误:

错误1可访问性不一致:参数类型'System.Collections.Generic.List&lt; _05_WindowsFormsAppCat.Cat&gt;'比方法'_05_WindowsFormsAppCat.DisplayForm.DisplayForm(System.Collections.Generic.List&lt; _05_WindowsFormsAppCat.Cat&gt;)'

更难访问

有什么想法吗?

2 个答案:

答案 0 :(得分:8)

List部分是一个完整的红鲱鱼。如果您的构造函数具有Cat参数而不是List<Cat>参数,则会出现完全相同的问题。

您的Cat类型可能是内部类型,因为您尚未将其声明为public。因此,您无法在 public 成员的签名中使用它,例如:

public DisplayForm(List<Cat> catList)

选项:

  • Cat成为公共课
  • 让您的DisplayForm内置构造函数

我个人认为,尽管对于小型项目而言,它并不会产生太大的影响,特别是对于那些只是单一装配的应用程序而言,我只是为了保持私密性。大多数开发人员倾向于错误地将所有内容公开,这是IMO的错误,但这是一个判断调用。上述两个选项都可以正常工作......但是你至少应该思考关于你是否希望任何其他程序集知道Cat类型(或者你是否想要其他代码)程序集能够调用该构造函数)。

答案 1 :(得分:3)

你在哪里宣布Cat课程?它必须可由DisplayForm类公开访问。您可能必须在其声明中添加public关键字。

这称为类型或成员的可访问性。

以下是不同级别及其默认值的参考:

http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx

我猜你的Cat类型在另一个程序集(项目)中作为DisplayForm,在这种情况下默认情况下该项目中的类不可见,或者您定义的它作为你的第一个Form类的嵌套类,它将使它成为private并且可以在该Form的范围内访问。