Stefan,

Unfortunately this would not work, because in order to drill down to the
nested object that needs updating, I would need to call:

          parent = fi.GetValue (parent) // see code below

which returns me a copy-by-value of each nested level, and SetValue() would
only update this copy, not my original object.

I need something like ref, but applied to GetValue().

The code below supports array children at any level.
I can hardly believe that I need code like this to be able to access
Child[12].Field of Parent using reflection, but I can live with it.
For setting the value of Child[12].Field of Parent I have no solution.

I can feel in my toes that GetValueDirect() and its TypedReference are what
I need, but I can not find any clear info and/or samples on using it.

Thanks.

Michel.

Code:

    private static object GetFieldValue (object parent, string field)
    {
      string[] fields = field.Split ('.');
      string fld = "";
      FieldInfo fi = null;
      Match match = null;
      int index = -1;
      for (int i = 0; i < fields.Length; i++)
      {
        fld = fields[i];
        match = Regex.Match (fld, @"\[\d*\]");
        if (match.Length > 0)
        {
          fld = fld.Substring (0, match.Index);
          index = int.Parse (Regex.Replace (match.ToString(),
@"\[|\]", ""));
        }
        fi = parent.GetType().GetField (fld);
        if (fi != null)
        {
          parent = fi.GetValue (parent);
          if (parent is System.Array)
          {
            parent = ((System.Array) parent).GetValue (index);
          }
        }
        else
        {
          parent = null;
        }
      }
      return parent;
    }

Reply via email to