使用反射获取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
相关产品推荐
相关产品推荐

