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.
    }
}
War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top