Reportez-vous à un nom de propriété par variable
Est-il un moyen de faire référence à un nom de propriété avec une variable?
Scénario: Objet d'Un public, d'avoir propriété integer X un Z, donc...
public void setProperty(int index, int value)
{
string property = "";
if (index == 1)
{
//set the property X with 'value'
property = "X";
}
else
{
//set the property Z with 'value'
property = "Z";
}
A.{property} = value;
}
C'est un exemple stupide, donc veuillez croire, j'ai un emploi pour cet.
- Il est difficile de comprendre ce que vous essayez d'accomplir.
- Vous pouvez le faire en utilisant le Système.La réflexion se Référer à cette stackoverflow.com/questions/619767/... par exemple.
- Je suis plutôt curieux de savoir pourquoi vous faites quelque chose comme cela au lieu d'utiliser une propriété comme une propriété?
- Si c'est possible, vous devez croire que cela peut être utile.
- Je pense que tout peut être utile de donner le droit circonstancié, mais je suis curieux de savoir la raison. Êtes-vous essayer de définir la valeur de la propriété si elle EST une propriété spécifique? Un peu de contexte pourrait faire la lumière sur ce que le code ci-dessus est d'essayer
- Il est bien sûr possible, et il y a des situations dans lesquelles il est approprié, mais ils sont rares. La réflexion est souvent mal utilisée par ceux qui ne savent tout simplement pas comment faire pour la conception de leur application correctement en premier lieu. En vous demandant pourquoi vous essayez de faire cela, il va déterminer si il vous indique comment utiliser la réflexion pour résoudre ce problème, ou comment éviter d'avoir ce type de problème en premier lieu par une bonne conception.
- Si vous êtes seulement en train d'essayer de retarder l'acte de la définition de la propriété, voir ma réponse.
- totalement. Maintenant que j'ai plus utilisé extrêmement complexes réflexion depuis que j'ai posté, je me rends compte combien ils ont négligé cette question.
Vous devez vous connecter pour publier un commentaire.
Facile:
Noter que
GetProperty("X")
retournenull
si le type dea
n'a pas de propriété nommée "X".Pour définir la propriété dans la syntaxe que vous avez fourni à écrire juste une méthode d'extension:
Et de l'utiliser comme ceci:
UPD
Noter que cette réflexion méthode est relativement lente. De meilleures performances pour l'utilisation dynamique de génération de code ou de l'expression des arbres. Il y a des bonnes bibliothèques qui peuvent faire ce complexe choses pour vous. Par exemple, FastMember.
Pas dans la façon dont votre suggérant, mais oui c'est faisable. Vous pouvez utiliser un
dynamic
objet (ou même d'un objet avec une propriété de l'indexeur), par exempleOu, sinon, par l'aide de la Réflexion:
Je pense que vous voulez dire de la réflexion...
Comme:
Il est difficile pour moi de comprendre ce que vous essayez d'atteindre... si vous êtes en essayant de déterminer la propriété et de la valeur séparément et à des moments différents, vous pouvez enrouler la loi de la définition de la propriété à l'intérieur d'un délégué.