任何人都知道如何从FullName获取Type对象?
EG。
string fullName = typeof(string).FullName;
Type stringType = <INSERT CODE HERE>
Assert.AreEqual(stringType, typeof(string)
答案 0 :(得分:4)
string fullName = typeof(string).FullName;
Type stringType = Type.GetType(fullName);
但请注意,这仅搜索调用程序集和核心MS程序集。最好使用AssemblyQualifiedName
,首先找到Assembly
,然后使用Assembly.GetType(fullName)
。
或者:
string qualifiedName = typeof(string).AssemblyQualifiedName;
Type stringType = Type.GetType(qualifiedName);
或
Assembly a = typeof(SomeOtherTypeInTheSameAssembly).Assembly;
Type type = a.GetType(fullName);
更新评论;请注意AssemblyQualifiedName
包含版本信息;这适用于配置文件之类的东西,但是如果(就像这里的情况那样)你使用它来保持持久性,通常最好使用独立于实现的合同。例如,只要布局正确,xml(通过XmlSerializer
或DataContractSerializer
)就不关心特定类型。
如果空间有问题,二进制格式通常会更短 - 但BinaryFormatter
包含类型元数据,并且不依赖于平台(例如,尝试从java中使用它)。在这种情况下,您可能希望查看自定义序列化程序,例如基于合同的protobuf-net,但使用Google的“协议缓冲区”跨平台有线格式。
答案 1 :(得分:1)
string fullName = typeof(string).FullName;
Type stringType = Type.GetType(fullName);
Assert.AreEqual(stringType, typeof(string)