Unity杂文——通过类名获取对应的Type

  1. 问题
  2. 解决
  3. 获取方式讲解

原文地址

问题

笔者在编辑器开发过程中遇到一个问题,笔者想通过一个类的名字获取对应的类的Type然后再做一系列的操作,但是笔者发现无法直接获取,于是笔者通过不断的尝试通过下面的方法获取到了,如果有更好的方法欢迎告诉笔者。

解决

话不多说,先上代码:

[MenuItem("Assets/GetType",false,81)]
public static void GetClassTypeByClassTypeName()
{
    const string className = "TestScripts";
    //方法一(在同一程序集内并且非自身Class才能获取到)
    var type = Type.GetType(className);
    Debug.LogError(type);
    
    var allAssemblies = AppDomain.CurrentDomain.GetAssemblies();
    
    //方法二(有特殊情况会获取不到,笔者没找到获取不到的原因)
    type = allAssemblies.Select(assembly => assembly.GetType(className)).FirstOrDefault(assembly => assembly != null);
    Debug.LogError(type);
    
    //方法三(如果存在类重名的情况有概率获取错误,可以通过路径做限制)
    type = allAssemblies.SelectMany(assembly => assembly.GetTypes()).FirstOrDefault(type1 => type1.Name == className);
    Debug.LogError(type);
}

运行结果如下

方法一和方法二的获取条件都有限制,因此笔者建议使用方法三进行获取。

获取方式讲解

方法一是直接在当前程序集进行获取的。
方法二是通过遍历当前程序的所有程序集,然后通过程序集直接GetType进行获取
方法三是类似于方法二,得到所有的程序集再遍历程序集中的Type,判断名字是否相同来得到对应的Type


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 841774407@qq.com

×

喜欢就点赞,疼爱就打赏