Seguendo questo excellent answer, mi chiedo se il DLR che utilizza la parola chiave dynamic
possa consentire un modo meno dettagliato di scrivere il codice per l'assembly generato.Utilizzare DLR per eseguire il codice generato con CompileAssemblyFromSource?
per esempio, può codice del citato risposta:
using (Microsoft.CSharp.CSharpCodeProvider foo =
new Microsoft.CSharp.CSharpCodeProvider())
{
var res = foo.CompileAssemblyFromSource(
new System.CodeDom.Compiler.CompilerParameters() {
GenerateInMemory = true
},
"public class FooClass { public string Execute() { return \"output!\";}}"
);
var type = res.CompiledAssembly.GetType("FooClass");
var obj = Activator.CreateInstance(type);
var output = type.GetMethod("Execute").Invoke(obj, new object[] { });
}
diventare qualcosa di simile:
using (Microsoft.CSharp.CSharpCodeProvider foo =
new Microsoft.CSharp.CSharpCodeProvider())
{
var res = foo.CompileAssemblyFromSource(
new System.CodeDom.Compiler.CompilerParameters() {
GenerateInMemory = true
},
"public class FooClass { public string Execute() { return \"output!\";}}"
);
var type = res.CompiledAssembly.GetType("FooClass");
dynamic obj = Activator.CreateDynamicInstance(type);
var output = obj.Execute();
}
Sì, c'è un po 'meno codice. Farlo funzionare usando "Activator.CreateInstance()" invece. Altrimenti non vedo una domanda. –
Sì, l'ho appena provato e ho capito che "funziona" con 'dynamic' invece di' var'. Roba molto interessante –