Với một đối tượng PropertyInfo, làm thế nào tôi có thể kiểm tra xem setter của tài sản có được công khai không?Làm thế nào để kiểm tra xem thiết lập thuộc tính là public
Trả lời
Kiểm tra những gì bạn nhận lại từ GetSetMethod
:
MethodInfo setMethod = propInfo.GetSetMethod();
if (setMethod == null)
{
// The setter doesn't exist or isn't public.
}
Hoặc, để đặt một spin khác nhau trên Richard's answer:
if (propInfo.CanWrite && propInfo.GetSetMethod(/*nonPublic*/ true).IsPublic)
{
// The setter exists and is public.
}
Note rằng nếu tất cả những gì bạn muốn làm là thiết lập một thuộc tính miễn là nó có một setter, bạn không actuall y phải quan tâm liệu setter có công khai hay không. Bạn chỉ có thể sử dụng nó, công hoặc tin:
// This will give you the setter, whatever its accessibility,
// assuming it exists.
MethodInfo setter = propInfo.GetSetMethod(/*nonPublic*/ true);
if (setter != null)
{
// Just be aware that you're kind of being sneaky here.
setter.Invoke(target, new object[] { value });
}
Thuộc tính .NET thực sự là trình bao gói xung quanh phương thức get và set.
Bạn có thể sử dụng phương thức GetSetMethod
trên PropertyInfo, trả về MethodInfo đề cập đến setter. Bạn có thể làm điều tương tự với GetGetMethod
.
Các phương thức này sẽ trả về giá trị rỗng nếu trình lấy/đặt không công khai.
Mã đúng ở đây là:
bool IsPublic = propertyInfo.GetSetMethod() != null;
public class Program
{
class Foo
{
public string Bar { get; private set; }
}
static void Main(string[] args)
{
var prop = typeof(Foo).GetProperty("Bar");
if (prop != null)
{
// The property exists
var setter = prop.GetSetMethod(true);
if (setter != null)
{
// There's a setter
Console.WriteLine(setter.IsPublic);
}
}
}
}
Bạn cần phải sử dụng phương pháp hạ để xác định khả năng tiếp cận, sử dụng PropertyInfo.GetGetMethod() hoặc PropertyInfo.GetSetMethod().
// Get a PropertyInfo instance...
var info = typeof(string).GetProperty ("Length");
// Then use the get method or the set method to determine accessibility
var isPublic = (info.GetGetMethod(true) ?? info.GetSetMethod(true)).IsPublic;
Lưu ý, tuy nhiên, các getter & setter có Accessibility khác nhau, ví dụ .:
class Demo {
public string Foo {/* public/* get; protected set; }
}
Vì vậy, bạn không thể giả định rằng phương thức getter và setter sẽ có khả năng hiển thị tương tự.
- 1. Làm thế nào để kiểm tra xem phương pháp có một thuộc tính
- 2. Django: Kiểm tra xem thuộc tính khóa ngoại được thiết lập
- 3. Làm thế nào để kiểm tra xem "thiết lập" trong c
- 4. Làm thế nào để kiểm tra xem biến đối tượng được thiết lập
- 5. Làm thế nào để kiểm tra xem thiết bị là iPad Mini
- 6. Làm thế nào để kiểm tra xem một loại là chuỗi trong C#?
- 7. Làm thế nào để kiểm tra thiết bị Android là thiết bị có nguồn gốc?
- 8. Làm thế nào để Thiết lập ActiveX Tên kiểm soát
- 9. Làm cách nào để xem loại thuộc tính trong Trình kiểm tra đối tượng?
- 10. kiểm tra nếu một thuộc tính đối tượng được thiết lập - SimpleXML
- 11. Làm cách nào để kiểm tra xem một lớp groovy có thuộc tính tĩnh hay không?
- 12. VBA Kiểm tra xem biến là trống
- 13. lập trình kiểm tra xem phương pháp là công khai
- 14. Không thể thiết lập thuộc tính TestContext
- 15. Làm thế nào để thiết lập một số thuộc tính Hibernate trong Spring JPA Web Application?
- 16. Làm thế nào để biết một thuộc tính enum đã được thiết lập? C#
- 17. Làm cách nào để kiểm tra xem thuộc tính có tồn tại trong XmlAttributeCollection không?
- 18. Làm cách nào để kiểm tra xem thuộc tính lồng nhau có tồn tại trong SimpleXML
- 19. WPF: Làm thế nào để thiết lập thuộc tính Foreground của một TextBlock sử dụng DataTrigger
- 20. Cách kiểm tra xem thuộc tính có ảo không?
- 21. Làm thế nào để thiết lập/loại bỏ các thuộc tính động trong C#?
- 22. Kiểm tra nếu có ít nhất một bản ghi có một thuộc tính nhất định thiết lập là true
- 23. Làm thế nào để kiểm tra xem một đôi là null?
- 24. kiểm tra xem biến môi trường đã được thiết lập
- 25. Kiểm tra xem nút Xml có thuộc tính
- 26. Làm thế nào để thiết lập dự án Rails-Angular để kiểm tra JS?
- 27. Kiểm tra xem thuộc tính CoreData có trống không
- 28. Làm thế nào để kiểm tra xem một Datatable là Null hoặc Không có gì
- 29. Django: Làm thế nào để kiểm tra xem widget trường là hộp kiểm trong mẫu?
- 30. Đơn vị kiểm tra chỉ thị AngularJS xem một thuộc tính với phạm vi cô lập
+1: Điều này tốt hơn 'GetSetMethod(). IsPublic' : nó cũng hoạt động khi thuộc tính có * không * setter. – Ani
Cảm ơn @Dan Tao. Đây là câu trả lời hay nhất: upvoted! –
Cảm ơn @Dan Tao. :) –