1

このソリューションを私の既存のユーティリティ クラス (GetPropertyメソッドだけ)に適合させたいと思います。つまり、私のユーティリティ クラスは一般的に型指定されていません (つまり、クラス宣言には<T>パラメーターがPropertyHelperありません)。当分の間、追加することはできません。

言い換えれば、GetPropertyクラス全体ではなく、そのメソッドだけをジェネリック型にしたいのです。

では、メソッドを機能させるにはどのような変更が必要ですか? そのメソッドのジェネリック型のリストに T を追加しようとしました:

public static PropertyInfo GetProperty<T, TValue>(Expression<Func<T, TValue>> selector)

しかし、次のことをしようとするとエラーが発生します。

PropertyInfo prop = MyUtilClass.GetProperty<Foo>(x => x.Bar);

明らかに、これはaと a ...をGetProperty期待しているためです。TTValue

上記のように呼び出せるようにしたいだけです。どのように?

4

1 に答える 1

3

私はこれに基づいていないかもしれませんが、コードが必要な場合は次のようになります:

PropertyInfo prop = MyUtilClass.GetProperty<Foo>(x => x.Bar);

動作するには(その「x.Bar」に関するプロパティ情報を取得しようとしていると仮定して)、関数を次のように定義するだけです。

public static PropertyInfo GetProperty<T>(Expression<Func<T, Object>> selector)

次に、関数内から、次のようにメンバーの名前を読み取ります。

MemberExpression member = (MemberExpression)selector.Body;
String propertyName = member.Member.Name;
PropertyInfo info = typeof(T).GetProperty(propertyName, BindingFlags.Public 
            |  BindingFlags.Instance)
return info;

私が言ったように、私はベースから外れているかもしれませんが、それはあなたがやろうとしているように見えます。

于 2013-02-05T19:23:36.447 に答える