GetType默认是取Global空间的Type,如果要取特定空间的Type,就要输入参数“xxxSpace.xxxType"。
如果我们要一个可以搜索全部命名空间的GetType,可以这样写
List<Type> GetTypes(string className)
{
List<Type> res = new List<Type>();
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
{
var assemblyTypes = assembly.GetTypes();
for (int i = 0; i < assemblyTypes.Length; i++)
{
if (assemblyTypes[i].Name == className)
{
res.Add(assemblyTypes[i]);
}
}
}
return res;
}
或者在前面添加命名空间
public static string GetClassName()
{
return System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
}
public static string GetNameSpaceName()
{
return System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Namespace;
}
...
string settingsDataClassName = GetClassName();
string settingsDataNameSpaceName = GetNameSpaceName();
string searchClassString = settingsDataNameSpaceName + "." + settingsDataClassName;
//命名空间名.类名
Type settingsDataClassType = assembly.GetType(searchClassString);
...