我有一個代碼生成器,用於分析xml規範類&屬性 - 包括每個屬性的類型。確定類型名稱是枚舉類型
類型屬性string
int
bool
處理起來很簡單。
但是,如果類型不是原始的,然後我需要確定它是否是一個class
或enum
如果我有一個實例的MyType
MyObject
我能確定是否MyType
是一個enum type
通過:
if (MyType.IsEnum()) {}
但我擁有的就是這個類型的名字。
我有一個代碼生成器,用於分析xml規範類&屬性 - 包括每個屬性的類型。確定類型名稱是枚舉類型
類型屬性string
int
bool
處理起來很簡單。
但是,如果類型不是原始的,然後我需要確定它是否是一個class
或enum
如果我有一個實例的MyType
MyObject
我能確定是否MyType
是一個enum type
通過:
if (MyType.IsEnum()) {}
但我擁有的就是這個類型的名字。
嘗試Type.GetType認爲它你想找的東西,或者至少會返回一個類型的對象,那麼你可以調用.IsEnum
,您需要使用完全合格的名稱爲您的類型,像「MyNamespace.MyType」,而不僅僅是 「MyType的」
使用Type.GetType("nameofEnum")
方法
從MSDN Type.GetType Method (String)
獲取具有指定名稱的類型,執行區分大小寫 搜索
爲了得到它工作,你需要提供枚舉類型的裝配合格的名稱
的組裝限定名稱鍵入即可。如果類型是在當前執行 組裝或在mscorlib.dll,它是足以其命名空間提供類型名稱 合格
Type enumType = Type.GetType("AssemblyName.EnumName");
bool isEnum = enumType.IsEnum;
所以,如果一些命名空間內聲明的枚舉,你需要寫清「路徑」
namespace Project
{
namespace MyAllEnums
{
public enum DesignPatterns
{
Spagetti = 0,
Factory = 1
}
}
}
然後爲獲得使用類型
Type enumType = Type.GetType("Project.MyAllEnums.DesignPatterns");
if (enumType.IsEnum)
{
// ...
}
如果您還沒有關於枚舉類型的程序集名稱的信息,那麼另一種方法是檢查您擁有的所有程序集並返回第一個類型,其中包含您要查找的名稱。
舉例當前裝配
var assembly = Assembly.GetExecutingAssembly();
Type enumType = assembly.GetType("yourEnumType");
在上面你沒有裝配合格的名稱類型,但如果內部命名空間將無法正常工作內聲明的枚舉注意的方式。
'Type.GetType(「yourEnumType」)'這是你想要的嗎? – Fabio
這很奇怪:從立即窗口執行Type.GetType(「yourEnumType」)爲空 – BaltoStar