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

次に、このコードを使用して、に対してのみ取得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));
于 2013-03-15T14:39:53.947 に答える