2013-05-15 152 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++; 
}