2

foovar.GetType().GetProperty("PropertyName").GetValue(foovar)リフレクションを通じて可変変数のプロパティ値を取得するために広く使用しています。ただし、インターフェイス タイプでは機能しないようです。

IFoo foo = GetFoo();
string fooName= foo.Name; //It works perfectly

サードパーティのアセンブリを使用しているため、実装にアクセスできません。「名前」プロパティがあり、値を取得できます。しかし、反省することはできません。

試してみるとstring s = (string)foo.GetType().GetProperty("Name").GetValue(foo);、null エラーが発生します:「名前」プロパティがありません

確認PropertyInfo[] pi = foo.GetType().GetProperties();したところ、約 200 のプロパティが表示されますが、これらのどれも「名前」ではありません。実際、他の多くの「intellisense プロパティ」は表示されません。

インターフェイス型のプロパティの値を取得するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

3

返されるオブジェクトはIFoo明示的に実装される可能性があるため、Nameプロパティはプライベートになります。代わりにインターフェイス タイプを使用できます。

object property = typeof(IFoo).GetProperty("Name").GetValue(foo);

編集:それが機能しない場合、プロパティが実際にIFoo実装されている他のインターフェイスで定義されていると想定することしかできません。

public interface IBase
{
    string Name { get; }
}

public interface IFoo : IBase
{
}

この場合、それを宣言して使用する実際のインターフェースを見つける必要がありますName

于 2013-08-24T13:47:58.200 に答える