Установить свойства объектов из строки в C # - PullRequest
0 голосов
/ 20 декабря 2010

Есть ли способ установить свойства объектов из строки.Например, у меня есть операторы «FullRowSelect = true» и «HoverSelection = true» в виде строки для свойства ListView.

Как назначить эти свойства вместе со своими значениями без использования операторов if-else или switch-case?Есть ли SetProperty(propertyName,Value) метод или аналогичный для этого?

Ответы [ 8 ]

3 голосов
/ 20 декабря 2010

Попробуйте это:

private void setProperty(object containingObject, string propertyName, object newValue)
{
    containingObject.GetType().InvokeMember(propertyName, BindingFlags.SetProperty, null, containingObject, new object[] { newValue });
}
1 голос
/ 20 декабря 2010

Попробуйте это:

PropertyInfo pinfo = this.myListView.GetType().GetProperty("FullRowSelect");
if (pinfo != null)
    pinfo.SetValue(this.myListView, true, null);
1 голос
/ 20 декабря 2010

Вы можете использовать отражение, чтобы сделать это:

myObj.GetType().GetProperty("FullRowSelect").SetValue(myObj, true, null);
1 голос
/ 20 декабря 2010

Вы можете сделать это с помощью отражения, взгляните на SetValue метод класса PropertyInfo

 YourClass theObject = this;
 PropertyInfo piInstance = typeof(YourClass).GetProperty("PropertyName");
 piInstance.SetValue(theObject, "Value", null);
0 голосов
/ 20 декабря 2010

Первый вариант - использовать отражение:

    public class PropertyWrapper<T>
    {
        private Dictionary<string, MethodBase> _getters = new Dictionary<string, MethodBase>();

        public PropertyWrapper()
        {
            foreach (var item in typeof(T).GetProperties())
            {
                if (!item.CanRead)
                    continue;

                _getters.Add(item.Name, item.GetGetMethod());
            }
        }

        public string GetValue(T instance, string name)
        {
            MethodBase getter;
            if (_getters.TryGetValue(name, out getter))
                return getter.Invoke(instance, null).ToString();

            return string.Empty;
        }
    }

, чтобы получить значение свойства:

var wrapper = new PropertyWrapper<MyObject>(); //keep it as a member variable in your form

var myObject = new MyObject{LastName = "Arne");
var value = wrapper.GetValue(myObject, "LastName");

. Вы также можете использовать класс Expression для доступа к свойствам.

0 голосов
/ 20 декабря 2010

Это можно сделать с помощью рефлексии, например, посмотрите на этот вопрос .

0 голосов
/ 20 декабря 2010

Вы можете посмотреть на Отражение . Благодаря этому можно найти свойство и установить его стоимость. Но вам нужно разобрать вашу строку самостоятельно. И может быть проблема с получением правильного значения правильного типа из строки.

0 голосов
/ 20 декабря 2010

Нет такого метода, но вы могли бы написать такой, используя отражение .

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