in src/main/csharp/IntrospectionSupport.cs [126:160]
        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;
        }