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); }