10

我有以下对象:

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
}
4

1 回答 1

11

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

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

于 2015-08-27T22:16:23.223 回答