2016-06-21 45 views
1

我是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; 
     } 
    } 
} 

如果我这样做,我有错误,如

可访问性不一致:参数类型是不太容易接近..

我已经尝试更改公开的私人列表,但我得到更多的错误

可访问性不一致:字段类型是不太容易接近..

如果我改变清单ArrayList的。它正在工作。 是不可能把列表放在C#中的构造函数中?

+0

你确定'List'导致一个问题。当我看到上面的代码工作完全正常。没有问题,除了一个小命名convention.Check如果'TestData'类及其使用的属性是可访问的。 –

回答

2

我认为这个问题是不是与类Form2。它看起来很好。错误消息说Inconsistent accessibility:..和你正在访问这里面的类TestData。所以,你必须检查的TestData的定义和确认为public class TestData

+0

谢谢!我不知道这个班级默认是不公开的。稍后我会接受答案:) – user77177928

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

检查是否“TESTDATA”是私有还是公有,并重新命名私有变量在上面的代码中

+0

谢谢,但它仍然无法正常工作.. – user77177928

+1

检查'TestData'是私人还是公开 – andy

1

你需要改变你的TestData是公众,它被定义

public class TestData 
{ 

} 

如果TestDatainternal(默认情况下,如果你写了class TestData)或private ,这意味着它是不易访问比构造是公开的,这是你正在阅读的错误。

所以你有一个构造函数,任何人都可以访问,使用受限制的类型。这是不允许的。

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

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

相关问题