仅使用对象和属性的名称(但不是类型)获取属性值

时间:2010-06-03 20:23:17

标签: c# .net .net-3.5

假设我有一个传递属性名称的方法(作为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上运行。我也希望避免反思(但如果这是我唯一的追索权那么就是这样)。

感谢您的帮助。

2 个答案:

答案 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 }
}