Un objet en C# peut-il renvoyer la valeur de l'un de ses attributs si le nom de l'attribut souhaité est fourni sous forme de chaîne au moment de l'exécution ?
myObject["price"]
Disons que nous avons cet objet :
public class Widget
{
public Widget(){}
public DateTime productionDate {get;set;}
public decimal price {get;set;}
}
et cette définition de paramètre SqlCommand :
SqlCommand c = new SqlCommand();
c.Parameters.Add(new SqlParameter("@price", SqlDbType.SmallMoney,0,"price"));
Ailleurs dans le code dans une portée différente, l'utilisateur a cliqué sur un [Save Record]
bouton et nous devons maintenant lier les valeurs d'un objet widget aux paramètres d'une commande de mise à jour. Nous avons une référence à cette SqlCommand dans la variable command
:
foreach (SqlParameter p in command.Parameters)
{
// assume `parameter.SourceColumn` matches the widget attribute name
string attributeName = p.SourceColumn;
p.Value = widget[attributeName] // ??
}
Ajout à Crowcoder :
Vous pouvez utiliser la réflexion et appeler Type.GetProperty("nameOfProperty") pour obtenir un PropertyInfo sur lequel vous pouvez appeler la propriété GetMethod.
La propriété GetMethod renvoie un MethodInfo sur lequel vous pouvez appeler la méthode Invoke pour récupérer la valeur de la propriété.
Par exemple:
var propertyInfo = myObject.GetType().GetProperty("price");
var getMethod = propertyInfo.GetMethod;
string value = getMethod.Invoke(myObject, null) as string
Éditer:
Après avoir relu votre question, je me rends compte que je n'ai pas répondu à votre question. Vous devriez/pourriez combiner ma réponse précédente avec un indexeur : https://docs.microsoft.com/en-us/dotnet/articles/csharp/programming-guide/indexers/index
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots