久々に面白いと思った (^^)
public static string GetMemberName<T, R>(this T @this, Expression<Func<T, R>> expression)
{
return ((MemberExpression)expression.Body).Member.Name;
}
とすると
public class Hoge
{
public string Name { get; set; }
}
の時
Hoge hoge = new Hoge();
string name = hoge.GetMemberName(_ => _.Name);
で Name プロパティの名前 “Name” が取得できる、と。
LINQ の orderby 句なんかで出来ているので、何か手があるんだろうなと思いつつ、コレを見るまで深く考えてなかったのを反省。
ネタ元のさらにネタ元では
string name = hogehoge.GetMemberName(_ => _.Very.Deep.Name);
のような、深ーいオブジェクト階層にも対応した手順が紹介されていたけど、通常そこまで必要ないと思うので、よりシンプルなネタ元の手順を使わせていただきます m(_ _)m