根据typeName
获取Type
较为完备的办法
前年还在开发.NET产品,我那时候编写一个C#脚本解释引擎,遇到一个问题是,Type.GetType()
方法无法获取尚未装载类型。这些天,在阅读一些相关的代码时,得知了一种较为完整的方法,共享如下:
internal static Type FindTypeInCurrentDomain(string typeName)
{
Type type = null;
//如果该类型已经装载
type = Type.GetType(typeName);
if (type != null)
{
return type;
}
//在EntryAssembly中查找
if (Assembly.GetEntryAssembly() != null)
{
type = Assembly.GetEntryAssembly().GetType(typeName);
if (type != null)
{
return type;
}
}
//在CurrentDomain的所有Assembly中查找
Assembly[] assemblyArray = AppDomain.CurrentDomain.GetAssemblies();
int assemblyArrayLength = assemblyArray.Length;
for (int i = 0; i < assemblyArrayLength; ++i)
{
type = assemblyArray[i].GetType(typeName);
if (type != null)
{
return type;
}
}
for (int i = 0; (i < assemblyArrayLength); ++i)
{
Type[] typeArray = assemblyArray[i].GetTypes();
int typeArrayLength = typeArray.Length;
for (int j = 0; j < typeArrayLength; ++j)
{
if (typeArray[j].Name.Equals(typeName))
{
return typeArray[j];
}
}
}
return type;
}
2004-07-07 23:11Ying-Shen 回复 引用
Type.GetType()
方法无法获取尚未装载类型 这个是由于你的string
里面没有提供Assembly name
的缘故为什么在
Assembly.GetType(typeName)
找不到后 还要继续Type.Name.Equals(typeName)
?你现在的方法还是没有解决获取未加载的Assembly里的类型的问题呀。
2004-07-08 01:39温少的日志 回复 引用
可以的,如果你的bin目录下有该Assembly,那就会自动加载。请注意:
Assembly[] assemblyArray = AppDomain.CurrentDomain.GetAssemblies();