拡張メソッド+ラムダ式でメンバ名をエレガントに取得

ネタ元: C#でシンボルを実現する – 開発思考実験日記

久々に面白いと思った (^^)

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

  1. コメントする

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携済み

フォロー

Get every new post delivered to your Inbox.