我有以下课程。在BE的例子中(假设是objBE)我想在运行时选择属性名并指定它的值。例如我们有一个组合所有填充的属性,并在窗口窗体上有文本框和命令按钮。我想从组合中选择属性名称并在文本框中键入一些值,然后在按钮上单击我想从objBE中找到属性名称并将文本框值分配给所选属性。无法通过如何完成它。可以一些帮助。 提前致谢。 H N
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{}
}
}
答案 0 :(得分:0)
您可以在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);
}