这就是我所拥有的:
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));
}
我觉得我没有正确地做到这一点。
是否有更简单的方法来访问集合中匿名类型的属性?
答案 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));