Не уверенный, если это возможно, но здесь - то, что я пытаюсь сделать:
Я хочу иметь словарь, который содержит отображение индекса столбца к имени свойства, используемому для заполнения того индекса.
В моем коде я циклично выполнюсь через массив, если строки и будут использовать словарь для поиска, на какой столбец он должен отобразиться.
Мой код конечного результата был бы похож:
for(int index = 0; index < fields.Length)
{
fieldPropertyMapping[index] = StripQuotes(fields[index]);
}
Чтобы сделать то, о чем вы конкретно просите, вам придется использовать отражение (как вы отметили свой вопрос), чтобы сделать это. Взгляните на класс 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
и преобразовать его в правильный тип свойства в лямбде, но это должно работать в любом случае.
У вас есть несколько вариантов:
PropertyInfo
в метод и установите его значение с помощью отражения. вы можете использовать отражение для получения свойств класса:
var properties = obj.GetType().GetProperties();
foreach (var property in properties)
{
//read / write the property, here... do whatever you need
}