2016-06-21 119 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>()); 
     } 
    } 
} 

提示:測試類必須是公共類。

相關問題