Использование PropertyInfo для определения типа свойства - PullRequest
98 голосов
/ 16 сентября 2010

Я хочу динамически анализировать дерево объектов для выполнения некоторой пользовательской проверки. Проверка не важна как таковая, но я хочу лучше понять класс 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, какой это тип.

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

Спасибо.

1 Ответ

186 голосов
/ 16 сентября 2010

Используйте 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...