Comment puis-je obtenir le PropertyDescriptor code> de la propriété actuelle? Par exemple:
4 Réponses :
On dirige-t-il? Je pense que vous demandez si vous pouvez le faire sans la chaîne - c'est-à-dire un autre jeton qui représente "cette propriété". Je ne pense pas que cela existe. Mais puisque vous écrivez ce code quand même (?) Quelle est la difficulté de simplement mettre le nom de la propriété dans le code? P> p>
Est-ce que c'est ce cas, je vais obtenir de la propriétéInfo ... mais j'ai besoin de tycleConverter, displayName de ma propriété ..
De plus, je peux obtenir manuellement tous les attributs et trouver le tyconverter, mais ce n'est pas une bonne idée
Aussi, je peux utiliser Typedescriptor.geproperties (this), puis exécuter toutes les propriétés et trouver ce dont j'ai besoin ... mais peut-être que quelque chose de buit-in était déjà mis en œuvre ... et plus rapidement que cela que j'ai écrit ..
Votre code n'est pas refactoring amical. Utilisez un Lamda au lieu d'une chaîne.
@CodeInchaos - Comment pouvez-vous faire cela à l'aide d'un Lambda? Pourriez-vous poster un exemple s'il vous plaît?
Vous pouvez essayer ceci:
public string Test
{
get
{
//Get properties for this
System.ComponentModel.PropertyDescriptorCollection pdc = System.ComponentModel.TypeDescriptor.GetProperties( this );
//Get property descriptor for current property
System.ComponentModel.PropertyDescriptor pd = pdc[ System.Reflection.MethodBase.GetCurrentMethod().Name ];
}
}
OU ... Nice, et je peux écrire le système.componentmodel.propertyDescriptorCollection PDC = System.componentModel.typedescriptor.geproperties (this); Dans mon constructeur à utiliser, alors une seule fois ... merci !!
J'ai trouvé que ce qui suit a fonctionné:
// get property descriptions
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties ( this );
// get specific descriptor
PropertyDescriptor property = properties.Find ( PropertyName, false );
Voici une fonction de conversion réutilisable pour ceux qui sont arrivés à cet article à la recherche d'une fonction générale: et voici une méthode d'extension: p> public static PropertyDescriptor PropertyDescriptor(this PropertyInfo propertyInfo)
{
return TypeDescriptor.GetProperties(propertyInfo.DeclaringType)[propertyInfo.Name];
}