Как получить имя PropertyInfo.PropertyType типа EntityReference с помощью отражения - PullRequest
1 голос
/ 08 января 2010

Я пишу небольшой генератор кода, который будет читать в файл edmx и создавать бизнес-объекты на основе шаблона. Я использую отражение, чтобы выплевывать имена типов.

Проблема заключается в том, что когда я сталкиваюсь со свойством (PropertyInfo) типа Entity Reference (в основном это свойство сущности, если существует ссылочная целостность), 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 = нейтральный, PublicKeyToken = null]]», также не распознается компилятором C #.

Теперь я столкнулся с той же проблемой с типами Nullable. И я нашел статический метод Nullable.GetUnderlyingType (type), который решил проблему. Как получить имя типа свойства, являющегося типом сущности, имя, которое распознает компилятор C #?

1 Ответ

2 голосов
/ 08 января 2010

Универсальные типы содержат в своем имени `. Чтобы получить читаемое имя типа C #, вам нужно сначала проверить, является ли он универсальным типом, используя Type.IsGenericType . Если это универсальный тип, то вы можете использовать Type.GetGenericArguments () , чтобы получить список аргументов типа для универсального типа. Получив их имена, вы можете собрать общее имя типа, как. Например, если тип

Dictionary<int, string>

Тогда имя типа на самом деле будет Dictionary`2. Использование GetGenericArguments вернет массив двух типов (int и string). Из них вы можете создать составное имя.

Примечание: каждый из типов, возвращаемых из GetGenericArguments (), может сам по себе быть универсальным типом, поэтому вы должны написать это как рекурсивный алгоритм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...