如何通过匿名类型的集合进行枚举?

时间:2011-05-12 12:34:18

标签: c# .net linq anonymous-types

这就是我所拥有的:

List<Person> list = new List<Person>()
{
    new Person { Name="test", Age=1 },
    new Person { Name="tester", Age=2 }
};

var items = list.Select(x =>
{
    return new
    {
        Name = x.Name
    };
});

foreach (object o in items)
{
    Console.WriteLine(o.GetType().GetProperty("Name").GetValue(o, null));
}

我觉得我没有正确地做到这一点。

是否有更简单的方法来访问集合中匿名类型的属性?

5 个答案:

答案 0 :(得分:18)

同时使用var行中的foreach关键字,而不是常规object类型。然后,编译器将自动解析匿名类型及其所有成员,因此您可以直接按名称访问属性。

foreach (var o in items)
{
    Console.WriteLine(o.Name);
}

答案 1 :(得分:1)

var items = list.Select(x =>new { Name = x.Name });
        foreach (var o in items)
        {
            Console.WriteLine(o.Name);
        }

只需使用var即可获得完整的类型支持

答案 2 :(得分:1)

为什么不呢?

var items = list.Select(x => x.Name);

foreach (var o in items)
    Console.WriteLine(o);

您只获得一个字段,无需创建另一个匿名类型。

答案 3 :(得分:1)

之前的答案足够了。 只是简化,注意比你没有尽可能最大限度地简化。 你可以写

list.ForEach(person => Console.WriteLine(person.Name)); 

list.Select(person => person.Name).ToList().ForEach(Console.WriteLine); 

答案 4 :(得分:0)

如果你要遍历整个匿名收藏,你可以ToList()并使用List.ForEach()方法:

   List<Person> list = new List<Person>()
    {
        new Person { Name="test", Age=1},
        new Person { Name="tester", Age=2}
    };

   var items = list.Select(x =>
        {
            return new
            {
                Name = x.Name
            };

        }).ToList();

   items.ForEach(o => Console.WriteLine(o.Name));