2

このクラスがあるとします:

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

そして、MyProperty を文字列 (「MyProperty」など) として取得したいのですが、ラムダ式または「リファクタリングに適した」他の方法を使用します。

次のような構文はありますか。

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

私はこのコードをしたくありません:

myComboBox.DisplayMember = "MyProperty"

「リファクタリングに適した」ものではないためです。

4

1 に答える 1

6

これに対する答えを見てみましょう: Type-safe databinding のための C# での 'nameof' 演算子の欠如の回避策?

あなたの場合、この汎用クラスを実装すると:

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 に答える