Я пытаюсь сделать язык программирования.Проблема возникает при попытке скомпилировать лямбда в модуль, точнее при попытке преобразования из строки в t (некоторый тип), используя Convert.ChangeType вместо t.Parse.Если я использую LambdaExpression.Compile и использую DynamicInvoke для делегата, это работает, но если я использую CompileToMethod и генерирую модуль (abc.exe) и конвертирую, используя Convert.ChangeType, он выдает исключение при запуске модуля: System.Ошибка TypeAccessException не обработана. Сообщение = Попытка метода 'Foo.Main ()' для доступа к типу 'System.RuntimeType' завершилась неудачей.
Метод, использованный для преобразования:
private static Expression ConvertExpression<T>(Expression exprToConvert)
{
Type[] types = new Type[] { typeof(object), typeof(Type) };
MethodInfo changeTypeMethod = typeof(System.Convert).GetMethod("ChangeType", types);
Expression convertedExprAsObject = Expression.Call(changeTypeMethod, exprToConvert, Expression.Constant(typeof(T)));
return Expression.Convert(convertedExprAsObject, typeof(T));
}