開発思考実験日記

2009-09-13 (^_^)

[]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));
    }
}

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

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。