我正在加载在运行时生成的程序集,该程序集包含一个具有多个需要设置的属性的类。
根据我的研究,我发现这可以使用Reflection,所以这里是我加载程序集的方法:
Assembly a = Assembly.LoadFrom("ClassLibrary1.dll");
Type t = (Type)a.GetTypes()[0];
现在我正试图以这种方式定义属性:
object ClassObj = Activator.CreateInstance(t);
PropertyInfo p= t.GetProperties()[0];
int x=1;
p.SetValue(ClassObj,x);
这对我来说似乎不太可行,所以我想到了使用“动态”类型。
dynamic ClassObj = Activator.CreateInstance(t);
ClassObj.soma = 1;
不幸的是,这似乎不起作用。
它声明:
'object' does not contain a definition for 'soma'
无论如何我可以将类映射到动态变量中吗?
编辑:
动态ClassObj的字段显示“soma”的适当性
答案 0 :(得分:0)
它对我来说很好,试试这个:
public class TypeTest
{
public string mimimi { get; set; }
}
Type t = typeof(TypeTest);
dynamic instanceTypeTeste = Activator.CreateInstance(t);
instanceTipoTeste.mimimi = "test";
代码中可能存在的问题:
Public
答案 1 :(得分:0)
使用dynamic
时,您必须确保您尝试访问的所有属性都已正确写入。或者您的财产不是soma
,而是Soma
,或者Type t = (Type)a.GetTypes()[0];
不会返回您期望的类型。
我在这里尝试使用相同的代码,当我尝试访问具有不同名称的属性时,它会抛出相同的异常。
您也可以尝试编写程序集的所有路径:
Assembly a = Assembly.LoadFrom(@"C:\PathHere\ClassLibrary1.dll");
顺便说一下,您的班级和财产必须是公开的,否则您将无法正常访问。