Wie PropertyDescriptor für aktuelle Immobilien zu bekommen?
-
12-10-2019 - |
Frage
Wie kann ich die PropertyDescriptor
für die aktuelle Eigenschaft erhalten? Zum Beispiel:
[MyAttribute("SomeText")]
public string MyProperty
{
get{....}
set
{
// here I want to get PropertyDescriptor for this property.
}
}
Lösung
Sie könnten versuchen, diese:
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 ];
}
}
Andere Tipps
Hier ist eine wiederverwendbare Konvertierungsfunktion für diejenigen, die auf diesen Beitrag bekam für eine allgemeine Funktion suchen:
public static PropertyDescriptor GetPropertyDescriptor(PropertyInfo PropertyInfo)
{
return TypeDescriptor.GetProperties(PropertyInfo.DeclaringType).Item(PropertyInfo.Name);
}
und hier ist eine Erweiterung Methode:
public static PropertyDescriptor PropertyDescriptor(this PropertyInfo propertyInfo)
{
return TypeDescriptor.GetProperties(propertyInfo.DeclaringType)[propertyInfo.Name];
}
Ich fand, dass die folgenden gearbeitet:
// get property descriptions
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties ( this );
// get specific descriptor
PropertyDescriptor property = properties.Find ( PropertyName, false );
Dabei gilt PropertyName
ein Wert in eine Methode übergeben wird.
Wie wäre das?
this.GetType().GetProperty("MyProperty")
Ich glaube, Sie gefragt, ob Sie dies ohne die Zeichenfolge tun können - das heißt einen anderen Token, das ‚diese Eigenschaft‘ darstellt. Ich glaube nicht, dass existiert. Aber da Sie diesen Code schreiben sowieso (?) Was ist die Schwierigkeit, gerade in dem Code, um den Namen der Eigenschaft setzen?