Как найти общее имя свойства экземпляра класса и как присвоить значение времени выполнения свойства - PullRequest
2 голосов
/ 17 ноября 2011

У меня есть следующие классы.В случае BE (скажем, objBE) я хочу выбрать имя свойства во время выполнения и присвоить его значение.Например, у нас есть комбо со всеми заполненными свойствами, и у нас есть текстовое поле и командная кнопка в форме окна.Я хочу выбрать имя свойства из комбинированного списка и ввести какое-либо значение в текстовом поле, а при нажатии кнопки я хочу найти имя свойства в objBE и назначить значение текстового поля для выбранного свойства.Не могу понять, как это сделать.Может ли помочь.Заранее спасибо.HN

public class MyPropertyBase
{
    public int StartOffset { get; set; }
    public int EndOffset { get; set; }
}

public class MyProperty<T> : MyPropertyBase
{
    public MyProperty(T propertyValue)
    {
        PropertyValue = propertyValue;
    }

    public T PropertyValue { get; set; }

    public static implicit operator MyProperty<T>(T t)
    {
        return new MyProperty<T>(t);
    }
}

public class BE
{
    private List<Admin_Fee> _Admin_Fee = new List<Admin_Fee>();

    public MyProperty<int> RFID
    {get;set;}
    public MyProperty<string> CUSIP
    {get;set;}
    public MyProperty<string> FUND_CITY 
    {get;set;}

    public MyProperty<int> SomeOtherProperty { get; set; }
    //public List<MyPropertyBase> MyDataPoints { get; set; }
    public List<Admin_Fee> Admin_Fee 
     {
         get{return _Admin_Fee;}
         set{}
     }
}

1 Ответ

0 голосов
/ 17 ноября 2011

Вы можете использовать GetProperty на Type, затем использовать SetValue на PropertyInfo экземпляре.Исходя из вашего описания, я думаю, что вы хотите что-то вроде этого:

void Main()
{
    BE be  = new BE();
    SetMyPropertyValue("RFID", be, 2);
    SetMyPropertyValue("CUSIP", be, "hello, world");

    Console.WriteLine(be.RFID.PropertyValue);
    Console.WriteLine(be.CUSIP.PropertyValue);
}

private void SetMyPropertyValue(string propertyName, object instance, object valueToSet) 
{
    Type be = instance.GetType();
    Type valueType = valueToSet.GetType();
    Type typeToSet = typeof(MyProperty<>).MakeGenericType(valueType);
    object value = Activator.CreateInstance(typeToSet,valueToSet);

    var prop = be.GetProperty(propertyName);
    prop.SetValue(instance, value, null);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...