Вопрос по c# – Как получить значение свойства с помощью отражения

38

У меня есть следующий код:

<code>FieldInfo[] fieldInfos;
fieldInfos = GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
</code>

То, что я пытаюсь сделать, это получить значение одного из моих свойств текущего экземпляра во время выполнения, используя отражение. Как я могу это сделать?

@JacobKrall - это на самом деле свойство auto, которое, я считаю, компилятор создает для поддержки свойства вспомогательного поля. Icemanind
Если вам нужна недвижимость, не смотрите на поля.msdn.microsoft.com/en-us/library/kyaxdd3x.aspx Jacob Krall
Возможный дубликатGet property value from string using reflection in C# Michael Freidgeim
возможный дубликатGet property value from string using reflection in C# Jacob Krall

Ваш Ответ

2   ответа
22

ПопробуйтеGetProperties Метод, он должен получить вам свойство, а не поля.

Чтобы получить значение, сделайте что-то вроде этого:

object foo = ...;
object propertyValue = foo.GetType().GetProperty("PropertyName").GetValue(foo, null);

Это использует GetProperty, который возвращает только один объект PropertyInfo, а не их массив. Затем мы вызываем GetValue, который принимает параметр объекта для извлечения значения (PropertyInfo относится к типу, а не к экземпляру). Второй параметр GetValue - это массив индексаторов для свойств индекса, и я предполагаю, что свойство, которое вас интересует, не является индексированным свойством. (Индексированное свойство - это то, что позволяет вамlist[14] чтобы получить 14-й элемент списка.)

Я думаю, что OP заинтересован в одном свойстве, в частности, и эта функция сама по себе не получит значение.
85

Примерно так должно работать:

var value = (string)GetType().GetProperty("SomeProperty").GetValue(this, null);

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