Установка значений не значащих членов объекта посредством отражения - PullRequest
1 голос
/ 23 марта 2012

Я пытаюсь написать очень слабосвязанный метод для сопоставления значений, возвращаемых из базы данных и сохраненных в DataTable, со свойствами пользовательского объекта.Это прекрасно работает для всех свойств типа значения, но у меня возникают проблемы при настройке свойств объектов, которые сами являются свойствами основного класса.Вот что у меня есть:

    protected void AssignDataRowToFields(DataRow data, object currentClass = null)
    {
        string strPrefix = currentClass == null ? string.Empty : currentClass.GetType().Name;
        currentClass = currentClass ?? this;

        PropertyInfo[] properties = currentClass.GetType().GetProperties();

        foreach (PropertyInfo pi in properties)
        {
            if (pi.PropertyType.IsValueType || typeof(string).IsAssignableFrom(pi.PropertyType))
            {
                if (typeof(string).IsAssignableFrom(pi.PropertyType))
                    pi.SetValue(this, data[strPrefix + pi.Name].ToString(), null);
                else if (typeof(int).IsAssignableFrom(pi.PropertyType))
                    pi.SetValue(this, int.Parse(data[strPrefix + pi.Name].ToString()), null);
            }
            else
                this.AssignDataRowToFields(data, pi.GetValue(currentClass, null));
        }
    }

Последнее, где я рекурсивно вызываю AssignDataRowToFields, всегда возвращает null для pi.GetValue(currentClass, null).Я также попытался pi.GetGetMethod().Invoke(currentClass, null), но это также возвращает ноль.Спасибо за любую помощь, спасибо!

РЕДАКТИРОВАТЬ: Все рассматриваемые свойства являются автоматическими свойствами формы:

public ComplexType theProperty { get; private set; }

1 Ответ

1 голос
/ 23 марта 2012

Убедитесь, что ваш конструктор класса сначала создает подобъекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...