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");
MyClass
không?