我希望能够使用反射循环遍历不实现接口的对象的属性
本质上,我想实现与此相反的How do I use reflection to get properties explicitly implementing an interface?
原因是我想将对象映射到另一个对象,其中任何未由接口定义的属性都将添加到KeyValuePairs列表中。

最佳答案

使用此示例:

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

然后使用这个代码,我只得到PropertyInfoB
  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));

09-10 21:28