This question already has answers here:
Type.GetType(“namespace.a.b.ClassName”) returns null

(16个回答)


5年前关闭。




我有一个Web应用程序,该应用程序使用用户控件动态创建网页。

在我的代码中,我具有以下内容:
    private void Render_Modules()
    {
        foreach (OnlineSystemPageCustom.OnlineSystemPageHdr.OnlineSystemPageModule item in custompage.Header.Modules)
        {
            if (item.ModuleCustomOrder != 99 && !item.ModuleOptional)
            {
                string typeName = item.ModuleInternetFile;
                Type child = Type.GetType(typeName);
                webonlinecustombase ctl = (webonlinecustombase)Page.LoadControl("../IPAM_Controls/webtemplatecontrols/" + child.Name.ToString() + ".ascx");
                ctl.Event = Event;
                ctl.custompage = custompage;
                ctl.custommodule = item;
                this.eventprogrammodules.Controls.Add(ctl);
            }
        }
    }

返回的“typeName”(示例)为:
IPAMIntranet.IPAM_Controls.webtemplatecontrols.eventorgcommittee
用户控件的 namespace 如下:
namespace IPAMIntranet.IPAM_Controls

我遇到的问题是Type.GetType(typeName)返回null。我在这里想念什么?

最佳答案

当您未在字符串中指定程序集名称时, Type.GetType(string) 仅在当前执行的程序集和mscorlib中查找。

选项:

  • 使用程序集限定名称代替
  • 在适当的程序集上调用 Assembly.GetType(name) 而不是

  • 如果您有一种简单的方式来获取相关程序集(例如,通过typeof(SomeKnownType).Assembly),那么第二个选项可能会更简单。

    关于c# - Type.GetType()返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8716414/

    10-12 19:07