我有以下对象:
dynamic person = new {Id = 1, Name = "SpiderMan"};
我需要能够遍历属性名称,例如"Id"
,"Name"
。
我还需要能够以最有效的方式实现这一点,因此我选择使用FastMember但是它的api不允许我遍历属性。
有什么想法吗?
[UPDATE]
感谢Marc,我设法实现了我想要的用途:
dynamic person = new { Id = 1, Name = "SpiderMan" };
MemberSet members = TypeAccessor.Create(person.GetType()).GetMembers();
foreach (Member item in members)
{
// do whatever
}
答案 0 :(得分:6)
对于您显示的方案,TypeAccessor.Create(obj.GetType())
和GetMember()
应该可以正常工作,因为该类型适用于反射。
在更一般的情况下:这是一个公平的问题 - 老实说,我不记得FastMember是否为真正的动态类型公开了这一点,但这里一个重要的考虑因素是,根据动态对象的本质,属性甚至可以枚举 - 即代码可以在不知道obj.Whatever
的情况下动态响应Whatever
。然而,对于你实际拥有的物体,简单的反射是你最好的选择。您显示的方案不需要dynamic
。