【问题标题】:Initialize classes of dynamic types初始化动态类型的类
【发布时间】:2013-02-27 16:41:37
【问题描述】:

我有一个方法,我需要根据用户设置动态更改使用的类,如下所示,dEnvelope 类也需要初始化其属性以填充所有子类并以相同的方式使用,所有这些不同的 Year 类都有确切的结构,但业务逻辑的内部方法不同

    dynamic dEnvelope;

    if (UserYear==2013)
        dEnvelope = new Years.Y2013.DataEnvelope();
    else
        dEnvelope = new Years.Y2012.DataEnvelope();


    dEnvelope.InnerClass= Activator.CreateInstance(Type.GetType(dEnvelope.InnerClass));

但是在执行 Activator.CreateInstance 行时我收到一个错误

{"值不能为空。\r\n参数名称:typeName"}

我是否遗漏了有关动态类型使用的一些内容?有没有更好的方法来动态选择要在运行时使用的正确类?

【问题讨论】:

    标签: c# c#-4.0 dynamic reflection activator


    【解决方案1】:

    我认为您应该首先通过构造函数初始化“年”类的变量,然后您应该尝试访问该方法。即dEnvelope = new Years().Y2013.DataEnvelope();

    还请显示您的代码 sn-p 以便更好地理解。

    【讨论】:

    • Years.Y2013 和 Years.Y2012 是命名空间而不是类。
    • 它是空指针; Type.GetType("namespace.qualified.TypeName") 仅在 mscorlib.dll 或当前执行的程序集中找到该类型时才有效。请检查您的代码
    • dEnvelope.InnerClass= Activator.CreateInstance(Type.GetType(dEnvelope.InnerClass));
    • 你也可以使用其他方法——Type myClassType = Type.GetType("TypeName,DllName");只需检查一下。
    • 这条评论和我上面的代码有什么不同,你真的读过这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 2016-08-17
    • 2019-11-22
    • 2017-09-09
    • 2011-05-12
    • 2011-02-26
    • 1970-01-01
    • 2020-01-31
    • 2020-04-14
    相关资源
    最近更新 更多