如何通过反射获取EntityReference类型的PropertyInfo.PropertyType名称

时间:2010-01-08 03:43:21

标签: reflection

我正在编写一个小代码生成器,它将读入edmx文件并在模板的基础上创建业务对象。我正在使用反射来吐出类型名称。

问题是当我遇到类型为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#编译器可识别的名称?

1 个答案:

答案 0 :(得分:2)

通用类型在其名称中包含`。要获得该类型的C#可读名称,您需要首先使用 Type.IsGenericType 检查它是否是泛型类型。如果它是泛型类型,则可以使用 Type.GetGenericArguments()来获取泛型类型的类型参数列表。通过获取他们的名字,您可以将通用类型名称放在一起。例如,如果类型是

Dictionary<int, string>

然后,类型名称实际上是Dictionary`2。使用GetGenericArguments将返回一个包含两种类型(int和string)的数组。从中可以生成复合名称。

注意:从GetGenericArguments()返回的每个类型本身可能是泛型类型,因此您应该将其写为递归算法。