2016-08-09 2 views
3

System.Linq.Expressions APIを使用してオブジェクトのリストからDataTableを作成するメソッドを作成しようとしていますが、式を逆コンパイルすると次のILを生成する方法がわかりません。typeof (int)System.Linq.Expressions APIを使用して「typeof(T)」をエミュレートするにはどうすればよいですか?

IL_0000: nop   
IL_0001: ldtoken  System.Int32 
IL_0006: call  System.Type.GetTypeFromHandle 
IL_000B: call  LINQPad.Extensions.Dump<Object> 
IL_0010: pop   
IL_0011: ret 

現在、私が代わりにType.GetType("System.Int")を呼び出すことによって、問題をスカートしようとしているが、私はすべての可能であればtypeof (int)のためのコードを生成したいと思います。

答えて

7

だけExpression.Constantを使用し、値としてtypeof(int)に渡す:あなたはラムダ式内typeof使用するときに、とにかく、何が起こるかだ

var expression = Expression.Constant(typeof(int), typeof(Type)); 

Expression<Func<Type>> func =() => typeof(T); 
+0

パーフェクトを、私が探していたものだけ。私はちょうどそれが簡単ではないと思ったと思います。 –

関連する問題