私は特定の方法で回避しようとしているという共通の問題を抱えています。
基本的にWinformsでは、コントロールの「DisplayMember」と「ValueMember」をフォームに設定しようとしています。通常は次のように設定します。
this.testCombobox.DisplayMember = "PropertyOne";
this.testCombobox.ValueMember = "PropertyTwo";
これを次のように書き換えたい。
this.testCombobox.DisplayMember = ClassOne.GetPropertyName(c => c.PropertyOne);
this.testCombobox.ValueMember = ClassOne.GetPropertyName(c => c.PropertyTwo);
(注: ここでオブジェクトの作成を保存するには、2 つのメソッド呼び出しを静的にする必要があります)
これを行おうとしているすべてのクラスは、基本クラス「BaseObject」から継承するため、次のようにメソッドを追加しました。
public static string GetPropertyName<T, P>(Expression<Func<T, P>> action) where T : class
{
MemberExpression expression = action.Body as MemberExpression;
return expression.Member.Name;
}
ただし、これを使用するには、代わりに次のコードを記述する必要があります。
this.testCombobox.DisplayMember = BaseObject.GetPropertyName((ClassOne c) => c.PropertyOne);
私の質問は、私が望むものを達成するためにどのようにメソッドを書き直すのBaseObject.GetPropertyName
ですか? 私はとても近いと感じていますが、それを変える方法が思いつきません。