Example #1
0
        private bool RequiresGetFieldHelperMethod(MetadataType valueType)
        {
            if (_objectEqualsMethod == null)
            {
                _objectEqualsMethod = GetWellKnownType(WellKnownType.Object).GetMethod("Equals", null);
            }

            // If the classlib doesn't have Object.Equals, we don't need this.
            if (_objectEqualsMethod == null)
            {
                return(false);
            }

            // Byref-like valuetypes cannot be boxed.
            if (valueType.IsByRefLike)
            {
                return(false);
            }

            // Enums get their overrides from System.Enum.
            if (valueType.IsEnum)
            {
                return(false);
            }

            // These need to provide an implementation of Equals/GetHashCode because of NaN handling.
            // The helper would be useless.
            if (valueType.IsWellKnownType(WellKnownType.Double) || valueType.IsWellKnownType(WellKnownType.Single))
            {
                return(false);
            }

            return(!_typeStateHashtable.GetOrCreateValue(valueType).CanCompareValueTypeBits);
        }