Twoja metoda wygląda następująco:
public static bool HasProperty(this object obj, string propertyName)
{
return obj.GetType().GetProperty(propertyName) != null;
}
To dodaje rozszerzenie do object
- klasy bazowej wszystkiego . Kiedy dzwonisz na to rozszerzenie, mijasz je Type
:
var res = typeof(MyClass).HasProperty("Label");
Twoja metoda oczekuje wystąpienia klasy, a nie Type
. W przeciwnym razie zasadniczo to robisz
typeof(MyClass) - this gives an instanceof `System.Type`.
Następnie
type.GetType() - this gives `System.Type`
Getproperty('xxx') - whatever you provide as xxx is unlikely to be on `System.Type`
Jak słusznie zauważa @PeterRitchie, w tym momencie Twój kod szuka właściwości Label
na System.Type
. Ta nieruchomość nie istnieje.
Rozwiązanie jest albo
a) Podaj wystąpienie MyClass do rozszerzenia:
var myInstance = new MyClass()
myInstance.HasProperty("Label")
b) Załóż przedłużenie System.Type
public static bool HasProperty(this Type obj, string propertyName)
{
return obj.GetProperty(propertyName) != null;
}
i
typeof(MyClass).HasProperty("Label");
MyClass
?