オブジェクトをコントロールとグリッドにデータバインドする場合、プロパティ名が魔法の文字列になるのが嫌だったので、次のような非常に単純なメソッドを作成しました。
public static string GetPropertyName<PropertyType>(Expression<Func<T, PropertyType>> expressionForProperty)
{
MemberExpression expression = expressionForProperty.Body as MemberExpression;
return expression.Member.Name;
}
これにより、次のようなコードを使用できます。
Product.GetPropertyName(m => m.Name)
「名前」を返す。
これは、基本的なオブジェクトに対して完全に機能します。ただし、メソッド呼び出しを次のように変更すると:
Product.GetPropertyName(m => m.ProductCategory.Name)
これも「名前」を返します。しかし、データバインディングが機能するためには、「ProductCategory.Name」を返す必要があります。メソッド「GetPropertyName」を変更してこれに到達する方法はありますか?
考えられる回避策は、次のようにすることです。
string test = Product.GetPropertyName(p => p.ProductCategory) + "." + ProductCategory.GetPropertyName(pc => pc.Name)
ただし、これはきちんとした解決策ではありません。