Получите значение свойства динамично

Тип перечисления отличается от целого числа. В вашем примере var не оценивает int, оно оценивает тип перечисления. Вы бы получили тот же результат, если бы использовали сам тип перечисления.

Типы перечисления выводят имя при печати, а не их значение.

7
задан Jamie Dixon 4 November 2009 в 16:23
поделиться

2 ответа

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

prop.GetValue(item, null);

PropertyInfo - это просто метаданные о свойстве типа , а не на конкретном экземпляре объекта. PropertyInfo не знает, из какого экземпляра он пришел (если есть) - только тип / класс, из которого он произошел.

Вы можете почти думать о PropertyInfo как о просто имени свойства. Этой информации недостаточно, чтобы что-то сделать с этим одним - тогда мы должны сказать «получить значение свойства с таким именем на ... что? » о предоставляемом нами объекте.

10
ответ дан 6 December 2019 в 19:38
поделиться

PropertyInfo представляет сам механизм свойств (тип, метод получения, метод набора и т. Д.), А не свойство, привязанное к конкретному экземпляру. Если свойство нестатическое, вы должны предоставить экземпляр для чтения этого свойства - это первый параметр GetValue. Другими словами, если pi - это PropertyInfo , представляющий свойство Test в некотором классе, а someObject - экземпляр этого класса:

object a = someObject.Test;
object b = pi.GetValue(someObject, null);

обе строки получают значение одного и того же свойства одного и того же объекта. Если свойство является статическим, вам, очевидно, не нужно передавать экземпляр (вместо этого передайте null). Второй параметр - это индекс для индексированных свойств - C # не поддерживает индексированные свойства (он поддерживает индексаторы, которые не совсем то же самое),

3
ответ дан 6 December 2019 в 19:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: