代码之家  ›  专栏  ›  技术社区  ›  Vaccano

获取仅包含对象和属性名称(但不包含类型)的属性值

  •  1
  • Vaccano  · 技术社区  · 14 年前

    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 .

    谢谢你的帮助。

    2 回复  |  直到 14 年前
        1
  •  2
  •   alejandrobog    14 年前

    我会去反思

      foreach (PropertyInfo info in myObject.GetType().GetProperties())
      {
        if (info.CanRead && info.Name == MappingName)
        {
          return info.GetValue(myObject, null);
        }
      }  
    
        2
  •  0
  •   MUG4N    14 年前

    我认为反思是实现这一目标的唯一途径:

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