Tu método se ve así:
public static bool HasProperty(this object obj, string propertyName)
{
return obj.GetType().GetProperty(propertyName) != null;
}
Esto agrega una extensión a object
la clase base de todo . Cuando llama a esta extensión, le está pasando un Type
:
var res = typeof(MyClass).HasProperty("Label");
Su método espera una instancia de una clase, no un Type
. De lo contrario, esencialmente estás haciendo
typeof(MyClass) - this gives an instanceof `System.Type`.
Entonces
type.GetType() - this gives `System.Type`
Getproperty('xxx') - whatever you provide as xxx is unlikely to be on `System.Type`
Como @PeterRitchie señala correctamente, en este punto su código está buscando una propiedad Label
en System.Type
. Esa propiedad no existe.
La solución es
a) Proporcione una instancia de MyClass a la extensión:
var myInstance = new MyClass()
myInstance.HasProperty("Label")
b) Pon la extensión en System.Type
public static bool HasProperty(this Type obj, string propertyName)
{
return obj.GetProperty(propertyName) != null;
}
y
typeof(MyClass).HasProperty("Label");
MyClass
?