2

假设我有这个类:

class MyClass {
  public int MyProperty { get; set; }
}

我想将 MyProperty 作为字符串(例如“MyProperty”),但通过 lambda 表达式或任何其他“重构友好”的方式。

是否有类似这样的语法:

void BindToDataSource(IEnumerable<MyClass> list) {
    myComboBox.DataSource = list;
    myComboBox.DisplayMember = typeof(MyClass).GetPropertyToString(c => c.MyProperty);
}

我不想这段代码:

myComboBox.DisplayMember = "MyProperty"

因为它不是“重构友好的”。

4

1 回答 1

6

看看这个问题的答案:Workaround for lack of 'nameof' operator in C# for type-safe databinding?

在您的情况下,如果您实现此通用类:

public class Nameof<T>
{
    public static string Property<TProp>(Expression<Func<T, TProp>> expression)
    {
        var body = expression.Body as MemberExpression;

        if(body == null)
            throw new ArgumentException("'expression' should be a member expression");

        return body.Member.Name;
    }
}

你可以像这样使用它:

void BindToDataSource(IEnumerable<MyClass> list) 
{
    myComboBox.DataSource = list;
    myComboBox.DisplayMember = Nameof<MyClass>.Property(e => e.MyProperty);
}
于 2013-05-22T10:45:20.490 回答