如何使用FastMember获取动态对象的属性?

11

我有以下对象:

dynamic person = new {Id = 1, Name = "SpiderMan"};

我需要能够遍历属性名称,例如"Id""Name"

为了达到最高效的目的,我选择使用FastMember,但它的API不允许我遍历属性。

有什么想法吗?

[更新]

感谢Marc的帮助,我成功地使用了以下方法来实现我的需求:

dynamic person = new { Id = 1, Name = "SpiderMan" };
MemberSet members = TypeAccessor.Create(person.GetType()).GetMembers();
foreach (Member item in members)
{
    // do whatever
}
1个回答

12

对于您展示的情况,TypeAccessor.Create(obj.GetType())GetMember() 应该可以正常工作,因为该类型适合反射。

在一般情况下:这是个很好的问题 - 老实说,我无法记得 FastMember 是否针对真正的动态类型公开了它,但这里有一个重要的考虑因素,那就是根据动态对象的本质,属性集可能甚至不可枚举 - 也就是说,代码可以根据需要动态响应 obj.Whatever,而不需要提前知道 Whatever。然而,对于您实际拥有的对象,简单的反射是最好的选择。您展示的场景不需要dynamic


1
谢谢Marc,GetMembers()在我的场景下非常好用。有没有计划将源代码从GoogleCode迁移到GitHub?再次感谢这个出色的库。 - MaYaN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接