2010-09-16 31 views
73

Tôi muốn phân tích động một cây đối tượng để thực hiện một số xác thực tùy chỉnh. Việc xác thực không quan trọng như vậy, nhưng tôi muốn hiểu lớp PropertyInfo tốt hơn.Sử dụng PropertyInfo để tìm ra loại thuộc tính

tôi sẽ làm một cái gì đó như thế này,

public bool ValidateData(object data) 
{ 
    foreach (PropertyInfo propertyInfo in data.GetType().GetProperties()) 
    { 
     if (the property is a string) 
     { 
      string value = propertyInfo.GetValue(data, null); 

      if value is not OK 
      { 
       return false; 
      } 
     } 
    }    

    return true; 
} 

Thật phần duy nhất tôi quan tâm lúc này là 'nếu tài sản là một chuỗi'. Làm thế nào tôi có thể tìm ra từ một đối tượng PropertyInfo loại nó là gì.

Tôi sẽ phải xử lý các nội dung cơ bản như chuỗi, int, tăng gấp đôi. Nhưng tôi cũng sẽ phải đối phó với các đối tượng, và nếu như vậy tôi sẽ cần phải đi qua cây đối tượng tiếp tục bên trong các đối tượng đó để xác nhận hợp lệ dữ liệu cơ bản bên trong chúng, chúng cũng sẽ có các chuỗi, vn ..

Cảm ơn.

Trả lời

140

Sử dụng PropertyInfo.PropertyType để nhận loại thuộc tính.

public bool ValidateData(object data) 
{ 
    foreach (PropertyInfo propertyInfo in data.GetType().GetProperties()) 
    { 
     if (propertyInfo.PropertyType == typeof(string)) 
     { 
      string value = propertyInfo.GetValue(data, null); 

      if value is not OK 
      { 
       return false; 
      } 
     } 
    }    

    return true; 
} 
+0

Tuyệt vời. Tôi sẽ thử cái này. Là typeof (string) và typeof (String) tương đương? Sẽ ở trên với cả một chuỗi và String? – peter

+2

OK, viết một số bài kiểm tra đơn vị và nó hoạt động một điều trị. Nó thực sự xử lý chuỗi và String giống nhau. Tôi mong đợi điều đó, nhưng chỉ muốn chắc chắn. – peter

+2

@peter Có, 'chuỗi' và' Chuỗi' bằng nhau. 'string' là một bí danh cho' Chuỗi'. – bump

Các vấn đề liên quan