2016-10-06 53 views
0

我有一個代碼生成器,用於分析xml規範類&屬性 - 包括每個屬性的類型。確定類型名稱是枚舉類型

類型屬性stringintbool處理起來很簡單。

但是,如果類型不是原始的,然後我需要確定它是否是一個classenum

如果我有一個實例的MyTypeMyObject我能確定是否MyType是一個enum type通過:

if (MyType.IsEnum()) {} 

但我擁有的就是這個類型的名字。

+0

'Type.GetType(「yourEnumType」)'這是你想要的嗎? – Fabio

+0

這很奇怪:從立即窗口執行Type.GetType(「yourEnumType」)爲空 – BaltoStar

回答

1

嘗試

instance.GetType().IsEnum 

或者只是

myType.IsEnum; 

UPD。沒有注意到你只有輸入名字。

Type.GetType("my_type").IsEnum 
+0

OP表示他只有類型名稱,而不是類型或實例類型 – Fabio

+0

謝謝,編輯 – tym32167

1

嘗試Type.GetType認爲它你想找的東西,或者至少會返回一個類型的對象,那麼你可以調用.IsEnum

,您需要使用完全合格的名稱爲您的類型,像「MyNamespace.MyType」,而不僅僅是 「MyType的」

0

使用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"); 

在上面你沒有裝配合格的名稱類型,但如果內部命名空間將無法正常工作內聲明的枚舉注意的方式。