Ihre Methode sieht folgendermaßen aus:
public static bool HasProperty(this object obj, string propertyName)
{
return obj.GetType().GetProperty(propertyName) != null;
}
Dies fügt eine Erweiterung hinzu object- die Basisklasse von allem . Wenn Sie diese Nebenstelle aufrufen, übergeben Sie sie Type:
var res = typeof(MyClass).HasProperty("Label");
Ihre Methode erwartet eine Instanz einer Klasse, keine Type. Ansonsten machst du im Wesentlichen
typeof(MyClass) - this gives an instanceof `System.Type`.
Dann
type.GetType() - this gives `System.Type`
Getproperty('xxx') - whatever you provide as xxx is unlikely to be on `System.Type`
Wie @PeterRitchie richtig hervorhebt, sucht Ihr Code an dieser Stelle nach einer Eigenschaft Labelfür System.Type. Diese Eigenschaft existiert nicht.
Die Lösung ist entweder
a) Stellen Sie der Erweiterung eine Instanz von MyClass bereit:
var myInstance = new MyClass()
myInstance.HasProperty("Label")
b) Setzen Sie die Verlängerung auf System.Type
public static bool HasProperty(this Type obj, string propertyName)
{
return obj.GetProperty(propertyName) != null;
}
und
typeof(MyClass).HasProperty("Label");
MyClass?