/// <include file='doc\Attribute.uex' path='docs/doc[@for="Attribute.GetHashCode"]/*' />
        public override int GetHashCode()
        {
            BCLDebug.Assert((this.GetType() as RuntimeType) != null, "Only RuntimeType's are supported");
            RuntimeType runtimeType = (RuntimeType)this.GetType();

            FieldInfo[] fields = runtimeType.InternalGetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, false);
            Object      vThis  = null;

            for (int i = 0; i < fields.Length; i++)
            {
                RuntimeFieldInfo runtimeField = fields[i] as RuntimeFieldInfo;
                vThis = runtimeField.InternalGetValue(this, false);

                if (vThis != null)
                {
                    break;
                }
            }

            if (vThis != null)
            {
                return(vThis.GetHashCode());
            }

            return(runtimeType.GetHashCode());
        }
Exemple #2
0
        public static Object[] GetObjectData(Object obj, MemberInfo[] members)
        {
            if (obj == null)
            {
                throw new ArgumentNullException("obj");
            }

            if (members == null)
            {
                throw new ArgumentNullException("members");
            }

            int numberOfMembers = members.Length;

            Object[]   data = new Object[numberOfMembers];
            MemberInfo mi;

            for (int i = 0; i < numberOfMembers; i++)
            {
                mi = members[i];

                if (mi == null)
                {
                    throw new ArgumentNullException("members", String.Format(Environment.GetResourceString("ArgumentNull_NullMember"), i));
                }

                if (mi.MemberType == MemberTypes.Field)
                {
                    BCLDebug.Assert(mi is RuntimeFieldInfo || mi is SerializationFieldInfo,
                                    "[FormatterServices.GetObjectData]mi is RuntimeFieldInfo || mi is SerializationFieldInfo.");

                    RuntimeFieldInfo rfi = mi as RuntimeFieldInfo;
                    if (rfi != null)
                    {
                        data[i] = rfi.InternalGetValue(obj, false);
                    }
                    else
                    {
                        data[i] = ((SerializationFieldInfo)mi).InternalGetValue(obj, false);
                    }
                }
                else
                {
                    throw new SerializationException(Environment.GetResourceString("Serialization_UnknownMemberInfo"));
                }
            }

            return(data);
        }
 internal Object InternalGetValue(Object obj, bool requiresAccessCheck)
 {
     return(m_field.InternalGetValue(obj, requiresAccessCheck));
 }