web-dev-qa-db-fra.com

Propriété définie dynamiquement C #

Duplicata possible:
. Net - Propriété de l'objet de jeu de réflexion
Définition d'une propriété par réflexion avec une valeur de chaîne

J'ai un objet avec plusieurs propriétés. Appelons l'objet objName. J'essaie de créer une méthode qui met simplement à jour l'objet avec les nouvelles valeurs de propriété.

Je veux pouvoir faire ce qui suit dans une méthode:

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
}

et enfin, l'appel:

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

J'espère que la question est suffisamment étoffée. Faites-moi savoir si vous avez besoin de plus de détails.

Merci pour toutes les réponses!

29
David Archer

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

53
josejuan

Vous pouvez utiliser Réflexion pour ce faire, par exemple.

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);
    }
}
35
James

Vous pouvez utiliser Type.InvokeMember pour ce faire.

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

Vous pouvez le faire par réflexion:

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});
}

REMARQUE: la gestion des erreurs a été intentionnellement omise pour des raisons de lisibilité.

1
Sean

Obtenez d'abord les informations sur la propriété, puis définissez la valeur sur la propriété:

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