private static object GetUnderlyingObject(MemberInfo member, object target)
{
object result = null;
if(member.MemberType == MemberTypes.Field)
{
FieldInfo field = member as FieldInfo;
if(field.FieldType.IsPrimitive)
{
throw new NMSException("The field given is a priomitive type: " + member.Name);
}
result = field.GetValue(target);
}
else
{
PropertyInfo property = member as PropertyInfo;
MethodInfo getter = property.GetGetMethod();
if(getter == null)
{
throw new NMSException("Cannot access member: " + member.Name);
}
result = getter.Invoke(target, null);
}
if(result == null)
{
throw new NMSException(String.Format("Could not retrieve the value of member {0}."), member.Name);
}
return result;
}