5

インターフェイスを実装するオブジェクトを含むすべてのプロパティを検索し、オブジェクトに対してメソッドを実行しようとしています。これは私がこれまでに持っているコードです:

foreach (var propertyInfo in this.GetType().GetProperties()
    .Where(xx => xx.GetCustomAttributes(typeof(SearchMeAttribute), false).Any()))
{
    if (propertyInfo.PropertyType.GetInterfaces().Any(xx => xx == typeof(IAmSearchable)))
    {
        // the following doesn't work, though I hoped it would
        return ((IAmSearchable)propertyInfo).SearchMeLikeYouKnowIAmGuilty(term);
    }
}

残念ながら、次のエラーが発生します。

タイプ'System.Reflection.RuntimePropertyInfo'のオブジェクトをタイプ'ConfigurationServices.ViewModels.IAmSearchable'にキャストできません。

ではなく、実際のオブジェクトを取得するにはどうすればよいRuntimePropertyInfoですか?

4

1 に答える 1

13

GetValue次のメソッドを使用して、プロパティから値を取得する必要があります。

object value = propertyInfo.GetValue(this, null);

これthisはプロパティの「ターゲット」でありnull、インデクサーではなく、パラメーターのないプロパティのみを期待していることを示します。

于 2012-07-23T15:47:54.953 に答える