Подтвердить что ты не робот

С# динамически задает свойство

Возможный дубликат:
.Net - Свойство свойства объекта отражения
Установка свойства путем отражения со строковым значением

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

У меня есть объект с несколькими свойствами. Позвольте вызвать объект objName. Я пытаюсь создать метод, который просто обновляет объект с новыми значениями свойств.

Я хочу иметь возможность сделать следующее в методе:

private void SetObjectProperty(string propertyName, string value, ref object objName)
{
    //some processing on the rest of the code to make sure we actually want to set this value.
    objName.propertyName = value
}

и, наконец, вызов:

SetObjectProperty("nameOfProperty", textBoxValue.Text, ref objName);

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

Спасибо всем за ответы!

4b9b3361

Ответ 1

objName.GetType().GetProperty("nameOfProperty").SetValue(objName, objValue, null)

Ответ 2

Вы можете использовать Reflection, чтобы сделать это, например.

private void SetObjectProperty(string propertyName, string value, object obj)
{
    PropertyInfo propertyInfo = obj.GetType().GetProperty(propertyName);
    // make sure object has the property we are after
    if (propertyInfo != null)
    {
        propertyInfo.SetValue(obj, value, null);
    }
}

Ответ 3

Вы можете использовать Type.InvokeMember, чтобы сделать это.

private void SetObjectProperty(string propertyName, string value, rel objName) 
{ 
    objName.GetType().InvokeMember(propertyName, 
        BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty, 
        Type.DefaultBinder, objName, value); 
} 

Ответ 4

Сначала введите информацию о свойствах, а затем установите значение свойства:

PropertyInfo propertyInfo = objName.GetType().GetProperty(propertyName);
propertyInfo.SetValue(propertyInfo, value, null);

Ответ 5

Вы можете сделать это через отражение:

void SetObjectProperty(object theObject, string propertyName, object value)
{
  Type type=theObject.GetType();
  var property=type.GetProperty(propertyName);
  var setter=property.SetMethod();
  setter.Invoke(theObject, new ojbject[]{value});
}

ПРИМЕЧАНИЕ. Обработка ошибок преднамеренно исключена для удобства чтения.