从FullyName字符串到Type对象

时间:2009-03-25 09:35:52

标签: c# .net reflection

任何人都知道如何从FullName获取Type对象?

EG。

string fullName = typeof(string).FullName; 
Type stringType = <INSERT CODE HERE> 
Assert.AreEqual(stringType, typeof(string) 

2 个答案:

答案 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(通过XmlSerializerDataContractSerializer)就不关心特定类型。

如果空间有问题,二进制格式通常会更短 - 但BinaryFormatter包含类型元数据,并且不依赖于平台(例如,尝试从java中使用它)。在这种情况下,您可能希望查看自定义序列化程序,例如基于合同的protobuf-net,但使用Google的“协议缓冲区”跨平台有线格式。

答案 1 :(得分:1)

string fullName = typeof(string).FullName; 
Type stringType = Type.GetType(fullName);
Assert.AreEqual(stringType, typeof(string)