我有一个常见的问题,我试图以特定的方式解决问题。
基本上使用 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
来实现我想要的?我觉得我很接近,但想不出如何改变它。