2013-05-15 198 views
0

我想創建匿名類型的列表,如下圖所示,但我會犯錯的地方如何創建匿名類型列表?

for (int i = 0; i < 10; i++) 
{  
    var list = new[] 
    { 
     new { Number = i, Name = string.Concat("name",i) } 
    }; 
} 

例如

var o1 = new { Id = 1, Name = "Name1" }; 
var o2 = new { Id = 2, Name = "Name2" }; 

var list = new[] { o1, o2 }.ToList(); 

如何在運行時做同樣的事情?

需要幫助。

+0

你正在得到什麼錯誤? –

+0

沒有錯誤...但收集始終是1 –

+3

這是因爲您在每個forloop –

回答

5

沒有錯誤...但集合始終爲1

那是因爲你正在創造在每個迭代

一個新的列表,您可以嘗試這樣的:

var list = new[] { new { Number = 0, Name = "Name1" } }.ToList(); //just to create a 
                //list of anonymous type object 
list.Clear(); 

for (int i = 0; i < 10; i++) 
{ 
    list.Add(new { Number = i, Name = string.Concat("name",i) }); 
} 

或者有一種方法可以使用List<Object>例如:

List<object> list = new List<object>(); 

for (int i = 0; i < 10; i++) 
{ 
    list.Add(new { Number = i, Name = string.Concat("name",i) }); 
} 

或者Enumerable.Range

var list = Enumerable.Range(0, 10) 
        .Select(i => new { Number = i, Name = "SomeName" }) 
        .ToList(); 
+0

如何在運行時做同樣的事情? –

+0

@ priyanka.sarkar,檢查編輯的答案 – Habib

0

你需要一個列表對象來存儲它,你可以使用。

List<Object> o = new List<Object>(); 
for (int i = 0; i < 10; i++) 
{  

    o.Add(new { Number = i, Name = string.Concat("name",i) }); 
} 

o.Dump(); 
+1

循環內的中間列表是完全不必要的。此外,您的代碼會創建一個匿名類型的數組列表。 –

+0

是的,你是對的。再一次,我不知道他想實現什麼。 – cherhan

+0

他想要一個包含十個匿名對象的列表。 –

0

定義列表中的第然後存儲在循環

List<Object> NewList = new List<Object>(); 
     for (int i = 0; i < 10; i++) 
     { 
      NewList.Add(
      { 
       new { Number = i, Name = string.Concat("name",i) } 

      }); 
     }  
+0

循環內部的中間列表是完全不必要的。此外,您的代碼會創建一個匿名類型的數組列表。 –

+0

@DanielHilgarth我無法明白你的觀點! –

+0

他只是因爲我們用列表收集包裝原始答案而使人們倒下。 – cherhan

3

值是怎麼想的類似如下(使用LINQ):

var anonList = Enumerable 
    .Range(1, 10) 
    .Select(i => new { 
     ID = i, 
     Name = String.Format("Name{0}", i) 
    }); 

你當然可以取代Enumerable.Range()與任何給你一個列表以供選擇。

0
int i = 0; 
while(i < 10) 
{ 
    list.Add(new { Number = i, Name = string.Concat("name",i) }); 
    i++; 
}