問(wèn)題
筆者在編輯器開(kāi)發(fā)過(guò)程中遇到一個(gè)問(wèn)題焙矛,筆者想通過(guò)一個(gè)類的名字獲取對(duì)應(yīng)的類的Type然后再做一系列的操作,但是筆者發(fā)現(xiàn)無(wú)法直接獲取擂红,于是筆者通過(guò)不斷的嘗試通過(guò)下面的方法獲取到了,如果有更好的方法歡迎告訴筆者妖啥。
解決
話不多說(shuō)陨晶,先上代碼:
[MenuItem("Assets/GetType",false,81)]
public static void GetClassTypeByClassTypeName()
{
const string className = "TestScripts";
//方法一(在同一程序集內(nèi)并且非自身Class才能獲取到)
var type = Type.GetType(className);
Debug.LogError(type);
var allAssemblies = AppDomain.CurrentDomain.GetAssemblies();
//方法二(有特殊情況會(huì)獲取不到芝硬,筆者沒(méi)找到獲取不到的原因)
type = allAssemblies.Select(assembly => assembly.GetType(className)).FirstOrDefault(assembly => assembly != null);
Debug.LogError(type);
//方法三(如果存在類重名的情況有概率獲取錯(cuò)誤蚜点,可以通過(guò)路徑做限制)
type = allAssemblies.SelectMany(assembly => assembly.GetTypes()).FirstOrDefault(type1 => type1.Name == className);
Debug.LogError(type);
}
運(yùn)行結(jié)果如下
方法一和方法二的獲取條件都有限制,因此筆者建議使用方法三進(jìn)行獲取拌阴。
獲取方式講解
方法一是直接在當(dāng)前程序集進(jìn)行獲取的绍绘。
方法二是通過(guò)遍歷當(dāng)前程序的所有程序集,然后通過(guò)程序集直接GetType進(jìn)行獲取
方法三是類似于方法二迟赃,得到所有的程序集再遍歷程序集中的Type陪拘,判斷名字是否相同來(lái)得到對(duì)應(yīng)的Type