Phương pháp của bạn trông giống như sau:
public static bool HasProperty(this object obj, string propertyName)
{
return obj.GetType().GetProperty(propertyName) != null;
}
Điều này thêm một phần mở rộng vào object- lớp cơ sở của mọi thứ . Khi bạn gọi phần mở rộng này, bạn đang chuyển nóType :
var res = typeof(MyClass).HasProperty("Label");
Phương thức của bạn mong đợi một phiên bản của một lớp, không phải mộtType . Nếu không, về cơ bản bạn đang làm
typeof(MyClass) - this gives an instanceof `System.Type`.
Sau đó
type.GetType() - this gives `System.Type`
Getproperty('xxx') - whatever you provide as xxx is unlikely to be on `System.Type`
Như @PeterRitchie đã chỉ ra một cách chính xác, tại thời điểm này, mã của bạn đang tìm kiếm thuộc tính Label trên System.Type. Tài sản đó không tồn tại.
Giải pháp là
a) Cung cấp một phiên bản của MyClass cho tiện ích mở rộng:
var myInstance = new MyClass()
myInstance.HasProperty("Label")
b) Đặt phần mở rộng vào System.Type
public static bool HasProperty(this Type obj, string propertyName)
{
return obj.GetProperty(propertyName) != null;
}
và
typeof(MyClass).HasProperty("Label");
MyClasskhông?