如何访问运行时编译类型的字段

时间:2013-11-24 14:24:03

标签: c# dynamic codedom

我使用CSharpCodeProvider从string编译一个类,并将编译后的类的实例作为动态返回:

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的定义

我认为我的错误是使用强制转换为动态类型,但我没有找到任何其他方式来访问仅在运行时才知道的字段。

1 个答案:

答案 0 :(得分:0)

默认情况下,dynamic不允许您使用不可访问的成员。

由于您的类型是在不同的程序集中定义的,因此您需要创建类型和属性public