【发布时间】:2013-11-25 12:59:32
【问题描述】:
我使用 CSharpCodeProvider 从字符串编译一个类,并将编译后的类的实例作为动态返回:
CodeDomProvider compiler = CSharpCodeProvider.CreateProvider("CSharp");
CompilerResults compilerResults = compiler.CompileAssemblyFromSource(parms, myClassCode);
Assembly assembly = compilerResults.CompiledAssembly;
resultType = assembly.GetType("MyClass");
var res = resultType.GetConstructor(new Type[] {}).Invoke(new object[] {});
return (dynamic)res;
所有编译都没有错误并返回实例是我需要的,但是当我尝试访问它的某些字段时,我得到一个异常:
'object' 不包含 MyInstancePublicField 的定义
我认为我的错误是使用强制转换为动态类型,但我没有发现任何其他方法可以访问仅在运行时才知道的字段。
【问题讨论】:
-
设为
public,或使用反射。 -
MyInstancePublicField 是公共字段
-
也将类型公开。
-
它帮助了我,谢谢!你可以把它写成答案,被接受。