如何通过字符串类名调用嵌套静态类的静态方法?
解决嵌套静态类的Type.GetType获取问题
问题核心在于嵌套类的完全限定名格式规则:.NET中嵌套类的类型名称不是用.分隔嵌套层级,而是用+符号。你用"MyNameSpace.Class1.Class2.Class3.Class4"这种格式调用Type.GetType时,运行时无法识别嵌套结构,自然找不到对应类型;而typeof是编译时解析,能自动处理嵌套类的结构关系,所以可以正常工作。
修复方案
- 修正类型字符串格式:把嵌套层级间的
.替换为+,正确的类型字符串应该是:"MyNameSpace.Class1+Class2+Class3+Class4" - 跨程序集的额外处理:如果目标类不在当前执行的程序集或系统核心程序集(如mscorlib)中,需要在类型字符串末尾添加程序集名称(用逗号分隔),示例:
其中"MyNameSpace.Class1+Class2+Class3+Class4, MyAssemblyName"MyAssemblyName是类所在程序集的名称(不要加.dll或.exe后缀)。
完整调用示例
// 获取嵌套类的Type对象 Type nestedType = Type.GetType("MyNameSpace.Class1+Class2+Class3+Class4"); // 调用静态方法MyMethod(无参数示例) nestedType?.GetMethod("MyMethod")?.Invoke(null, null);
额外说明
typeof是编译期解析,编译器会自动处理嵌套类的结构映射;而Type.GetType是运行时动态查找,必须严格遵循.NET的类型命名规范。- 如果
Type.GetType返回null,优先检查类型字符串格式是否正确,再确认目标程序集是否已被正确加载到当前应用域中。
内容的提问来源于stack exchange,提问作者Aykut Saribiyik
相关产品推荐
相关产品推荐

