2010-02-04 59 views
4

我如何可以插入一個新的對象,以匿名數組?我如何可以插入一個新的對象,以匿名數組?

var v = new[] 
      { 
       new {Name = "a", Surname = "b", Age = 1}, 
       new {Name = "b", Surname = "c", Age = 2} 
      }; 

我首先知道我們設置了數組的極限(大小)。

我把它轉換到列表。插入一個新的對象。

v.ToList().Add(new { Name = "c", Surname = "d", Age = 3 }); 

但我仍然有2個元素在v變量。第三個元素去了哪裏?

但我不能分配到另一個列表變量。

List newV = v.ToList(); 

回答

5

.ToList()產生一個新的列表對象,將輸入源的所有元素,您的陣列,進去。因此,原始數組完全沒有改變。

不能元素添加到現有的陣列,它有一個固定的大小,你唯一可以做的事情就是把一個新的數組轉換變量。

我還沒有嘗試過,但試試這個:

var l = v.ToList(); 
l.Add(...); // your existing add code 
v = l.ToArray(); 

但是,請注意,在這一點上,你應該看看你爲什麼要擺在首位使用匿名類型,我會認真考慮只是創建一個命名的類型,並使用一個列表開始。

請注意,你不能寫List l = v.ToList();作爲列表的類型是通用的(它會返回一些List<some-anonymous-type-here>,不只是List,隨着匿名類型,你需要使用var

1

它不是一個「清單」但通用的清單上鍵入您的匿名類型。正因爲如此,你將不能夠明確地寫出來的類型進行此操作。您必須使用「無功newV = v.ToList()」或鍵入它作爲一個IEnumerable,這是一種非泛型接口,泛型列表實現。

您的加入新的項目可能不會做你認爲,無論是上面的代碼。現在它是不添加新項v,但創建一個新的列表,添加項目到該列表,然後在列表中了,因爲你沒有提到它。您需要將v轉換爲列表,然後添加項目。

-1

其實你應該可以。爲了您的匿名V陣列上面,你可以添加一個新的項目如下:

MessageBox.Show(v[2].ToString()); 

v[2] = new {Name = "c", Surname = "d", Age = 3}; 

在添加新項目,你可以通過下面的代碼進行驗證,例如

相關問題