internal Object GetObject()
        {
            int      propNum  = 0;
            Assembly assembly = null;
            Object   ca       = CreateCAObject(ref propNum, ref assembly);

            if (propNum > 0)
            {
                Type caType = ca.GetType();
                do
                {
                    // deal with named properties
                    bool   isProperty      = false;
                    Object value           = null;
                    Type   type            = null;
                    string propOrFieldName = GetDataForPropertyOrField(ref isProperty, out value, out type, propNum == 1);
                    if (isProperty)
                    {
                        try {
                            // a type only comes back when a enum or an object is specified in all other cases the value
                            // already holds the info of what type that is
                            if (type == null && value != null)
                            {
                                type = (value is System.Type) ? s_TypeType : value.GetType();
                            }
                            RuntimePropertyInfo p = null;
                            if (type == null)
                            {
                                p = caType.GetProperty(propOrFieldName) as RuntimePropertyInfo;
                            }
                            else
                            {
                                p = caType.GetProperty(propOrFieldName, type) as RuntimePropertyInfo;
                            }
                            p.SetValueInternal(ca, value, assembly);
                        }
                        catch (Exception e) {
                            throw new CustomAttributeFormatException(String.Format(Environment.GetResourceString("RFLCT.InvalidPropFail"),
                                                                                   propOrFieldName),
                                                                     e);
                        }
                    }
                    else
                    {
                        try {
                            FieldInfo f = caType.GetField(propOrFieldName);
                            f.SetValue(ca, value);
                        }
                        catch (Exception e) {
                            throw new CustomAttributeFormatException(String.Format(Environment.GetResourceString("RFLCT.InvalidFieldFail"),
                                                                                   propOrFieldName),
                                                                     e);
                        }
                    }
                } while (--propNum > 0);
            }
            return(ca);
        }