2010-01-08 108 views
1

我正在編寫一個小型代碼生成器,它將讀入edmx文件並在模板的基礎上創建業務對象。我正在使用反射來吐出類型名稱。如何通過反射獲取EntityReference類型的PropertyInfo.PropertyType名稱

問題是當我遇到Entity Reference類型的屬性(PropertyInfo)(如果存在引用完整性,基本上是一個實體屬性),PropertyInfo.PropertyType.Name以「EntityReference`1」的形式出現由編譯器。

PropertyInfo.PropertyType.FullName給出「System.Data.Objects.DataClasses.EntityReference`1 [[BusinessObjectGenerator.Models.BE_Additional_Info,BusinessObjectGenerator,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]」,也不被C#編譯器識別。

現在我遇到了與Nullable類型相同的問題。我發現解決問題的靜態方法Nullable.GetUnderlyingType(type)。我如何獲取屬於實體類型的屬性的類型名稱,這是C#編譯器可識別的名稱?

回答

2

泛型類型在其名稱中包含``。要獲得C#可讀的類型名稱,您需要首先使用Type.IsGenericType來檢查它是否是泛型類型。如果它是泛型類型,那麼可以使用Type.GetGenericArguments()來獲取泛型類型的類型參數列表。通過獲取他們的名字,你可以把通用類型名稱放在一起。例如,如果類型是

Dictionary<int, string> 

然後,類型名稱實際上是Dictionary`2。使用GetGenericArguments將返回一個包含兩種類型(int和string)的數組。從這些你可以生成複合名稱。

注意:從GetGenericArguments()返回的每個類型本身可能是一個泛型類型,所以您應該將其作爲遞歸算法編寫。

相關問題