2014年5月26日月曜日

匿名型を返す

無理矢理に書いてみたが、

public class Foo
{
    public T Bar<T>(T valType)
    {
        return (T)Activator.CreateInstance(valType.GetType(), new object[] { "Bar", 17 });
    }
}

呼び出す側で、匿名型を作らなくてはならない。
static void Main(string[] args)
{
    var obj = new Foo();
    var result = obj.Bar(new { name = "", age = 0, });
    Console.WriteLine("name={0}, age={1}", result.name, result.age);

しかも、匿名型の型が違うとCreateInstanceで例外になるので(名前はOK)、
事前にチェックをしなくてはならない。
valType.GetType().GetConstructor(new Type[] { typeof(string), typeof(int) } );

もし、BarメソッドのGetConstructorで、エラーを検出したとして、どうする?
例外を投げる?・・・使いづらいな。

やはり、別途クラスを宣言するほうがよさそうだ。
Tupleも微妙に使いづらいんだよね。