C # TargetException в PropertyInfo.SetValue () с LookUpEdit - PullRequest
0 голосов
/ 22 октября 2018

У меня есть элемент управления LookUpEdit, и мне нужно установить значение свойства в NullText с отражением, но я получаю TargetException:

private static void SetObjectProperty(string propiedad, string valor, object obj)
    {
        if (obj.GetType() == typeof(LookUpEdit))
        {
            string[] vv = propiedad.Split('.');
            string prop = vv[0];
            string propType = vv[1];

            var p = obj.GetType().GetProperty(prop, BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
            PropertyInfo propertyInfo = p.PropertyType.GetProperty(propType);

            if (propertyInfo != null)
            {
                propertyInfo.SetValue(obj, valor, null);
            }     
        }
    }

Я получаю исключение только с элементом управления LookUpEdit.

"propiedad" - это строка, содержащая "Properties.NullText", поэтому я делаю разделение

1 Ответ

0 голосов
/ 23 октября 2018

Вы должны применять операции с вложенными свойствами к соответствующим вложенным объектам:

static void SetObjectProperty(object obj, string propertyPath, object value) {
    if(obj != null && obj.GetType() == typeof(LookUpEdit)) {
        string[] parts = propertyPath.Split('.');
        var rootInfo = typeof(LookUpEdit).GetProperty(parts[0], 
            BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
        object root = rootInfo.GetValue(obj); // obtaining a root
        var nestedInfo = rootInfo.PropertyType.GetProperty(parts[1]);
        if(nestedInfo != null) 
            nestedInfo.SetValue(root, value, null); // using root object
    }
}

PS.Почему вы используете этот ужасный способ изменения свойств объекта?

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