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

Reflection 如何通过反射获取EntityReference类型的PropertyInfo.PropertyType名称,reflection,Reflection,我正在编写一个小型代码生成器,它将读入edmx文件并在模板的基础上创建业务对象。我正在使用反射来吐出类型名称 问题是,当我遇到实体引用类型的属性(PropertyInfo)(如果存在引用完整性,则基本上是实体属性)时,PropertyInfo.PropertyType.Name显示为“EntityReference`1”,编译器无法识别它 PropertyInfo.PropertyType.FullName给出了“System.Data.Objects.DataClasses.EntityRef

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

问题是,当我遇到实体引用类型的属性(PropertyInfo)(如果存在引用完整性,则基本上是实体属性)时,PropertyInfo.PropertyType.Name显示为“EntityReference`1”,编译器无法识别它

PropertyInfo.PropertyType.FullName给出了“System.Data.Objects.DataClasses.EntityReference`1[[BusinessObjectGenerator.Models.BE\u附加信息,BusinessObjectGenerator,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]],这也是C编译器无法识别的


现在,我在可为null的类型上也遇到了同样的问题。我发现静态方法Nullable.getUnderlyngType(type)解决了这个问题。如何获取实体类型属性的类型名称,即C#编译器可以识别的名称?

泛型类型的名称中包含`。要获取类型的C可读名称,首先需要使用type.IsGenericType检查它是否为泛型类型。如果它是泛型类型,则可以使用type.GetGenericArguments()获取泛型类型的类型参数列表。通过获取它们的名称,您可以像这样组合泛型类型名称。例如,如果类型为

Dictionary<int, string>
字典
然后,类型名实际上是Dictionary`2。使用GetGenericArguments将返回两种类型(int和string)的数组。通过这些,您可以生成复合名称

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