C#值类型、引用类型中的Equals和==的区别浅析

2019-12-26 11:10:51王旭

                return CultureInfo.InvariantCulture.CompareInfo.Compare(this, value, CompareOptions.IgnoreCase) == 0;
            case StringComparison.Ordinal:
                return this.Length == value.Length && string.EqualsHelper(this, value);
            case StringComparison.OrdinalIgnoreCase:
                if (this.Length != value.Length)
                {
                    return false;
                }
                if (this.IsAscii() && value.IsAscii())
                {
                    return string.CompareOrdinalIgnoreCaseHelper(this, value) == 0;
                }
                return TextInfo.CompareOrdinalIgnoreCase(this, value) == 0;
            default:
                throw new ArgumentException(Environment.GetResourceString("NotSupported_StringComparison"), "comparisonType");
            }
        }
        [__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
        public static bool Equals(string a, string b)
        {
            return a == b || (a != null && b != null && a.Length == b.Length && string.EqualsHelper(a, b));
        }
        [__DynamicallyInvokable, SecuritySafeCritical]
        public static bool Equals(string a, string b, StringComparison comparisonType)
        {
            if (comparisonType < StringComparison.CurrentCulture || comparisonType > StringComparison.OrdinalIgnoreCase)