【发布时间】:2013-07-18 11:03:33
【问题描述】:
我有一个常见问题,我正试图以特定方式解决问题。
基本上使用 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 来实现我想要的?我觉得我很接近,但想不出如何改变它。
【问题讨论】: