C#でシンボルを実現する

これはいい。

Symbols in C# 3.0
http://themechanicalbride.blogspot.com/2007/03/symbols-on-steroids-in-c.html

以下のようにobjectクラスを拡張すると

public static string GetPropSym<TObj, TProp>(
  this TObj @this, Expression<Func<TObj, TProp>> expression)
{
    return ((MemberExpression)expression.Body).Member.Name;
}

ラムダ式を使ってプロパティをシンボルのように使える。タイプセーフになる。

public class Hoge
{
    public string Name { get; set; }
}

class HogeTest
{
    public void Execute()
    {
        Hoge ohoge = new Hoge();
        Console.WriteLine(ohoge.GetPropSym(o => o.Name));
    }
}

このアイデアメタプログラミングに応用するとさらに面白いアイデアがでてきそうですね。