2016-07-21 79 views
1

我以爲我很聰明,但我錯了。因此,對於單元測試,我需要列表中每個項目的X數量列表和一些值。所以我想出了這個作爲達成目標的簡明方式。初始化列表<T>與數組和填充

List<PlanList> planList = new List<PlanList>(new PlanList[7]); 
planList.ForEach(c => c.Description = "I'm a Description"); 
planList.ForEach(c => c.OrderPosition = 1); 

但事實證明,我得到了7個空對象的列表。

enter image description here

所以我很好奇,發生了什麼事,但更重要的是,我只是想快速生成與7對象都可以有相同的價值觀爲我的測試列表。

+4

您創建了一個包含7個元素的數組。正如你所看到的,你沒有初始化元素,所以它們都是空的。 –

回答

5

您沒有在數組的每個索引處創建一個對象。我看不到任何new PlanList()。所以你創建長度7保持默認值的參考類型PlanList這是NULL

您的代碼應該在ForEach拋出NullReferenceExpcetion一個數組中!

我這樣做:

List<PlanList> planList = (from index in Enumerable.Range(0, 7) 
          select new PlanList() 
          { 
           Description = "I'm a Description", 
           OrderPosition = index 
          }).ToList(); 
+0

我認爲OP希望'OrderPosition = 1'而不是'OrderPosition = x'。 –

+0

@ S.Akbari他可以改變它,我認爲他不可能在ForEach中有一個計數器,這就是爲什麼他將所有設置爲1.我只是用Enumerable.Range顯示它可以獲得。 – user3185569

+0

OP說:*我只是試圖快速生成一個列表與7對象,可以都具有相同的值爲我的測試* –

5

我猜測 PlanListstruct這裏,對不對? (沒有 new,值丟失)。

隨着struct,當你從獲取項目列表,你有一個副本。如果你改變副本:原來不知道或關心。

基本上,你的大部分問題都應該通過制定 PlanList a class來解決。在大多數常規的C#代碼中創建 struct是非常罕見的。

請注意,您將需要創建實例。如果是我,我只想用(其中PlanListclass):

var list = new List<PlanList>(); 
for(int i = 0 ; i < 7 ; i++) 
    list.Add(new PlanList { Description = "foo", OrderPosition = 1}); 
+0

不是結構它是一個類我只是不知道使每個人都在說的初始化語法。 – GPGVM

+0

@GPGVM那麼你的代碼應該已經用'NullReferenceException' –

+0

@ GPGVM爆炸了,但即使如此,上面顯示的代碼也會正確實例化它們 –

2

當你創建一個新的數組new PlanList[7],所有的數組中的元素將被初始化爲默認值爲該類型(見default keyword)。在你的情況下,默認值PlanListnull

您必須手動初始化每個元素。

一種方式做到這一點:

for(int i = 0; i < planList.Count; i++) 
    planList[i] = new PlanList(); 
8

看來你正在尋找的東西是這樣的:

List<PlanList> planList = Enumerable 
    .Range(0, 7) 
    .Select(index => new PlanList() { 
    Description = "I'm a Description", 
    OrderPosition = 1 
    }) 
    .ToList(); 

創建7PlanList實例和兌現他們的名單。