是否可以编写通用CIL指令,将任何类型的实例(值和引用)转换为System.String?特别是,我对Mono.Cecil代码很感兴趣,它会将这些指令注入到方法中.
分析一个通用方法我想出了这些Mono.Cecil调用:(它应该将第i个方法参数转换为字符串)
System.Reflection.MethodInfo to_string_method_info = typeof( System.Object ).GetMethod( "ToString" );
Mono.Cecil.MethodReference to_string_reference = injectible_assembly.MainModule.Import( to_string_method_info );
Mono.Cecil.TypeReference argument_type = method_definition.Parameters[ i ].ParameterType;
method_definition.Body.Instructions.Add( processor.Create( Mono.Cecil.Cil.OpCodes.Constrained, argument_type ) );
method_definition.Body.Instructions.Add( processor.Create( Mono.Cecil.Cil.OpCodes.Callvirt, to_string_reference ) );
Run Code Online (Sandbox Code Playgroud)
但是,在调试时,我从注入的方法中获得"JIT编译器遇到内部限制"的异常.