8

我希望能够使用反射来遍历不实现接口的对象的属性

本质上我想实现与此相反的效果如何使用反射来获取显式实现接口的属性?

原因是我想将对象映射到另一个对象,其中任何未由接口定义的属性都被添加到KeyValuePairs.

4

1 回答 1

10

使用这个例子:

interface IFoo
{
  string A { get; set; }
}
class Foo : IFoo
{
  public string A { get; set; }
  public string B { get; set; }
}

然后使用此代码,我只PropertyInfo得到B.

  var fooProps = typeof(Foo).GetProperties();
  var implementedProps = typeof(Foo).GetInterfaces().SelectMany(i => i.GetProperties());
  var onlyInFoo = fooProps.Select(prop => prop.Name).Except(implementedProps.Select(prop => prop.Name)).ToArray();
  var fooPropsFiltered = fooProps.Where(x => onlyInFoo.Contains(x.Name));
于 2013-03-15T14:39:53.947 回答