2016-08-09 11 views
3

Я пытаюсь создать метод, который будет создавать DataTable из списка объектов, используя API System.Linq.Expressions, но я не могу понять, как сгенерировать следующий IL, который я получаю, когда декомпилирую выражение typeof (int).Как я могу эмулировать «typeof (T)», используя API System.Linq.Expressions?

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) в качестве значения:

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

Вот что происходит, когда вы используете typeof в лямбда-выражения, так или иначе:

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

совершенны, что я искал , Думаю, я просто предположил, что это не может быть так просто. –

 Смежные вопросы

  • Нет связанных вопросов^_^