在C#中,可以将包含类型名称的字符串转换为相应的Type对象。但是,这种转换所使用的方法取决于类型是在与调用代码相同的程序集中定义,还是在不同的程序集中定义。
Type.GetType(string)
如果类型在同一个程序集中定义,可以使用Type.GetType(string)
方法,并提供完全限定的类型名称作为字符串。例如,要获取int
数据类型的Type
,可以使用:
Type.GetType("System.Int32");
Assembly.GetType(string)
如果类型在不同的程序集中定义,则还需要提供程序集名称。可以使用Assembly.GetType(string)
方法来实现。首先,获取对程序集的引用,然后使用该引用来获取Type
:
Assembly asm = typeof(SomeKnownType).Assembly;
Type type = asm.GetType("Namespace.MyClass");
确保在提供给Type.GetType()
或Assembly.GetType()
的字符串中包含类型的命名空间。此外,对于强命名程序集,可能需要包含完整的程序集标识,包括版本、区域性和公共密钥标记。
考虑以下场景,其中有一个字符串包含类型的完全限定名称:
string typeName = "Namespace.MyClass, MyAssembly";
根据MyAssembly
是否被调用程序集引用,可以使用Type.GetType()
或Assembly.GetType()
:
// 如果 MyAssembly 被引用
Type type1 = Type.GetType(typeName);
// 如果 MyAssembly 未被引用
Assembly asm = typeof(SomeKnownType).Assembly;
Type type2 = asm.GetType(typeName);
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3