Передача свойства в метод для изменения того свойства

Не уверенный, если это возможно, но здесь - то, что я пытаюсь сделать:

Я хочу иметь словарь, который содержит отображение индекса столбца к имени свойства, используемому для заполнения того индекса.

В моем коде я циклично выполнюсь через массив, если строки и будут использовать словарь для поиска, на какой столбец он должен отобразиться.

Мой код конечного результата был бы похож:

for(int index = 0; index < fields.Length)
{
    fieldPropertyMapping[index] = StripQuotes(fields[index]);
}
5
задан John Sonmez 25 June 2010 в 18:53
поделиться

3 ответа

Чтобы сделать то, о чем вы конкретно просите, вам придется использовать отражение (как вы отметили свой вопрос), чтобы сделать это. Взгляните на класс PropertyInfo . Я не совсем уверен, что делает ваш код, но общий пример рефлексивной установки значения свойства:

object targetInstance = ...; // your target instance

PropertyInfo prop = targetInstance.GetType().GetProperty(propertyName);

prop.SetValue(targetInstance, null, newValue);

Однако вы можете передать Action вместо этого, если вы знаете свойство в какой-то момент кода. Например:

YourType targetInstance = ...;

Action<PropertyType> prop = value => targetInstance.PropertyName = value;

... // in your consuming code

prop(newValue);

Или, если вы знаете тип, когда вызываете его, но у вас нет экземпляра, вы можете сделать его Action . Это также предотвратит закрытие.

Action<YourType, PropertyType> prop = (instance, value) => instance.PropertyName = value;

... // in your consuming code

prop(instance, newValue);

Чтобы сделать это полностью универсальным («универсальный» как «неспецифический», а не как универсальный), вам, вероятно, придется сделать его Action и преобразовать его в правильный тип свойства в лямбде, но это должно работать в любом случае.

6
ответ дан 14 December 2019 в 04:30
поделиться

У вас есть несколько вариантов:

  1. Использовать отражение. Сохраните и передайте объект PropertyInfo в метод и установите его значение с помощью отражения.
  2. Создайте ActionDelegate с закрытием этого свойства и передайте его в метод.
2
ответ дан 14 December 2019 в 04:30
поделиться

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

var properties = obj.GetType().GetProperties();

foreach (var property in properties)
{
  //read / write the property, here... do whatever you need
}
0
ответ дан 14 December 2019 в 04:30
поделиться
Другие вопросы по тегам:

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