Получить тип с помощью отражения - PullRequest
9 голосов
/ 18 марта 2012

Я пытаюсь получить тип свойства моего класса с помощью отражения, но оно возвращает мой единственный RuntimePropertyInfo - в качестве имени типа.

У меня есть объект MyObject actualData - он содержит свойство - "name" в виде строки и "Item" в качестве моего типа DatumType

Когда я отлаживаю, я вижу, что actualData имеет 2 свойства, первое - это тип строки, а второе - DatumType, но когда я использую это:

string typeName = actualData.getType().getProperty("Item").getType().Name - возвращает мне RuntimePropertyInfo, а не DatumType

Вы видите, что я делаю не так? Я использую C # - .Net 4.0. Большое спасибо!

Ответы [ 3 ]

13 голосов
/ 18 марта 2012

Вы получаете тип объекта PropertyInfo, возвращаемого getProperty(). Попробуйте

string typeName = actualData.getType().getProperty("Item").PropertyType.Name;

Если вы хотите указать тип значения, назначенного в данный момент объекту через объект PropertyInfo, вы можете вызвать:

string typeName = actualData.getType().getProperty("Item").GetValue(actualData, null).GetType().Name;

Но в этом случае вы также можете просто позвонить:

string typeName = actualData.Item.GetType().Name;
1 голос
/ 18 марта 2012

GetType() всегда возвращает тип текущего объекта, а не заостренного объекта.

В вашем случае рассмотрите возможность использования string typeName = actualData.getType().getProperty("Item").PropertyType.Name

1 голос
/ 18 марта 2012

The

actualData.getType().getProperty("Item")

извлекает что-то типа PropertyInfo.

Если вы спросите его тип:

actualData.getType().getProperty("Item").getType()

вы получаете именно то, что вы наблюдаете, вы получаете.

Я подозреваю, что этот последний getType() тогда не нужен.

Редактировать: кто-то отклонил этот ответ, который является несправедливым imho. Вопрос в том, "Вы видите, что я делаю не так?" и ответ «один слишком далеко» является правильным. Найти PropertyType в PropertyInfo тогда легко, если спрашивающий знает, что он делает неправильно.

Человеку, который проголосовал против этого ответа: по крайней мере, оставьте комментарий в следующий раз, когда вы что-то отрицаете. Stackoverflow имеет смысл только в том случае, если мы учимся друг у друга, а не просто окружаем всех вокруг.

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