You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用反射获取IfcPolyLoop类型时返回null的问题求助

解决反射获取IfcPolyLoop类型为null的问题

你遇到的核心问题是Type.GetType("IfcPolyLoop")无法找到目标类型,原因在于仅传入类名的查找范围有限,以下是针对性的解决方法:

常见原因及解决步骤

  • 必须指定完整命名空间
    C#的Type.GetType仅传入类名时,只会在当前执行的程序集和系统核心程序集里查找。如果IfcPolyLoop属于特定命名空间(比如IFC相关的IfcOpenShell或自定义命名空间),必须传入命名空间+类名的完整名称,示例:

    var type = Type.GetType("IfcOpenShell.IfcPolyLoop");
    
  • 类型在外部程序集时需附加程序集信息
    如果IfcPolyLoop来自第三方库(比如IFC SDK),要在类型名后加上程序集标识,格式为命名空间.类名, 程序集名称,示例:

    var type = Type.GetType("IfcOpenShell.IfcPolyLoop, IfcOpenShell");
    

    快速获取正确名称的方法:在直接new的代码new IfcPolyLoop(...)上右键「转到定义」,查看类的元数据就能拿到完整的命名空间和程序集信息。

  • 通过程序集直接查找更可靠
    如果你不确定完整名称,可以先获取目标类型所在的程序集,再查找类型,避免拼写错误:

    // 用同程序集的已知类型获取程序集
    var assembly = Assembly.GetAssembly(typeof(IfcElement));
    var type = assembly.GetType("IfcOpenShell.IfcPolyLoop");
    

    或者遍历所有加载的程序集查找:

    var type = AppDomain.CurrentDomain.GetAssemblies()
                        .SelectMany(asm => asm.GetTypes())
                        .FirstOrDefault(t => t.Name == "IfcPolyLoop");
    
  • 注意大小写匹配
    C#是大小写敏感语言,确保传入的typeName和类名完全一致(比如IfcPolyLoop不能写成ifcpolyloop)。

修正后的示例代码

private void convertFirstIfcPolyLoop(string typeName,string polyLoopLine)
{
    // 替换成你实际的完整类型名和程序集
    var type = Type.GetType("IfcOpenShell.IfcPolyLoop, IfcOpenShell");
    if (type == null)
    {
        // 这里可以加日志或错误提示,避免空引用
        return;
    }
    object instance = Activator.CreateInstance(type, polyLoopLine, this.listDictionaries);
    this.AddOrError((IfcElement)instance);
}

内容的提问来源于stack exchange,提问作者Siegfried.V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:35:22