2010-09-16 3 views
73

Я хочу динамически разобрать дерево объектов, чтобы выполнить некоторую выборочную проверку. Валидация не важна как таковая, но я хочу лучше понять класс PropertyInfo.Использование PropertyInfo для определения типа свойства

я буду делать что-то вроде этого,

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; 
} 

Действительно только часть меня волнует на данный момент ", если свойство является строкой. Как я могу узнать из объекта PropertyInfo, какой тип он есть.

Мне придется иметь дело с основными вещами, такими как строки, ints, double. Но мне также придется иметь дело с объектами, и если это так, мне нужно будет пересечь дерево объектов дальше внутри этих объектов, чтобы проверить основные данные внутри них, они также будут иметь строки и т. Д.

Спасибо.

ответ

140

Используйте PropertyInfo.PropertyType чтобы получить тип объекта недвижимости.

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

Отлично. Я попробую это. Является ли typeof (string) и typeof (String) эквивалентным? Будет ли указанное выше как с строкой, так и со строкой? – peter

+2

ОК, написано несколько модульных тестов, и это работает. Он действительно обрабатывает строку и String одинаково. Я ожидал этого, но просто хотел убедиться. – peter

+2

@peter Да, 'string' и' String' равны. 'string' является псевдонимом для' String'. – bump

Смежные вопросы