使用"dynamic"类型定义动态加载的类属性



我正在加载在运行时生成的程序集,该程序集包含一个类,该类具有多个需要设置的属性。

根据我的研究,我发现使用反射可以做到这一点,因此以下是我加载程序集的方式:

        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'

无论如何我可以将类映射到动态变量中吗?

编辑:

动态类 Obj 的字段显示"soma"属性

它对我来说很好用,试试这个:

    public class TypeTest
    {
        public string mimimi { get; set; }
    }
   Type t = typeof(TypeTest);
   dynamic instanceTypeTeste = Activator.CreateInstance(t);
   instanceTipoTeste.mimimi = "test";

代码中可能出现的问题:

  • 要更改值,需要Public属性和类
  • 正确的 sintax,因为属性名称区分大小写
  • 加载类型时,查看类的类型是否正确

当你使用 dynamic 时,你必须确保你尝试访问的所有属性都写正确。或者你的属性不是soma,它可能Soma,或者Type t = (Type)a.GetTypes()[0];没有返回你期望的类型。

我在这里尝试使用相同的代码,当我尝试访问具有不同名称的属性时,它抛出了相同的异常。

您还可以尝试编写程序集的所有路径:

Assembly a = Assembly.LoadFrom(@"C:PathHereClassLibrary1.dll");

顺便说一下,你的类和属性必须是公共的,否则你将无法正确访问它。

相关内容

  • 没有找到相关文章

最新更新