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も微妙に使いづらいんだよね。
0 件のコメント:
コメントを投稿