假设我有一个传递属性名称的方法(作为string
)和属性所在的对象(作为object
)。
我怎样才能获得该物业的价值?
这是一些使代码更具体的代码:
protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight)
{
// The next line is made up code
var currentValue = source.Current.CoolMethodToTakePropertyNameAndReturnValue(MappingName);
// Paint out the retrieved value
g.DrawString(currentValue.ToString() , _gridFont, new SolidBrush(Color.Black), bounds.Left + 1, bounds.Top);
}
MappingName是我想要获取其值的属性的名称。我需要的是CoolMethodToTakePropertyNameAndReturnValue
。
有什么想法吗?我在Compact Framework上运行。我也希望避免反思(但如果这是我唯一的追索权那么就是这样)。
感谢您的帮助。
答案 0 :(得分:2)
我会选择反思
foreach (PropertyInfo info in myObject.GetType().GetProperties())
{
if (info.CanRead && info.Name == MappingName)
{
return info.GetValue(myObject, null);
}
}
答案 1 :(得分:0)
我认为反思是实现这一目标的唯一方法:
To Get value
===============
foreach (PropertyInfo info in myObject.GetType().GetProperties())
{
if (info.CanRead)
{
object o = propertyInfo.GetValue(myObject, null);
}
}
To Set value
================
object myValue = "Something";
if (propertyInfo.CanWrite)
{
this.propertyInfo.SetValue(myObject, myValue, null);
}
Get fitting PropertyInfo:
=============================
foreach(PropertyInfo p in typeof(MyObject).GetProperties())
{
if ( p.Name == "MyProperty") { return p }
}