C # динамически устанавливаемое свойство [duplicate]

Возможный дубликат:

.Net - Свойство объекта Reflection set

Установка свойства с помощью отражения со строковым значением

У меня есть объект с несколькими свойствами. Позволять'вызовите объект 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);

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

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

 David Archer19 окт. 2012 г., 11:00
Действительно, я имел в виду ref, и да, я намерен изменить фактический экземпляр.
 James19 окт. 2012 г., 10:55
@DavidArcher нетrel клавиатура в C # ... Я так понимаю, вы имеете в видуref? Нет необходимости передавать объект какref если вы не собираетесь изменить фактический экземпляр этого.

Ответы на вопрос(5)

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

PropertyInfo propertyInfo = objName.GetType().GetProperty(propertyName);
propertyInfo.SetValue(propertyInfo, value, null);
Решение Вопроса

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

 Anonymous19 окт. 2012 г., 10:47
Вы должны использоватьpropertyName внутриGetProperty()
 josejuan22 окт. 2012 г., 10:59
Исключением, конечно, вы можете использовать GetProperties для тестирования.
 James19 окт. 2012 г., 11:16
А что еслиnameOfProperty» Безразлично»не существует?
 Ananda28 дек. 2015 г., 14:16
Я смог заменить мой 200-строчный код на 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});
}

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

Ты можешь использовать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); 
} 

Ты можешь использоватьотражение сделать это, например

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);
    }
}
 Chason Arthur29 июл. 2016 г., 17:05
Реквизиты для проверки на ноль перед вызовом.
 fdelia18 апр. 2018 г., 09:16
Я обычно тоже проверяюможно написать ".if (propertyInfo != null && propertyInfo.CanWrite)

Ваш ответ на вопрос