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 Label
fü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
?