Пример #1
0
 public override bool Equals(string x, string y)
 {
     if (object.ReferenceEquals(x, y))
     {
         return(true);
     }
     if ((x == null) || (y == null))
     {
         return(false);
     }
     if (!this._ignoreCase)
     {
         return(x.Equals(y));
     }
     if (x.Length != y.Length)
     {
         return(false);
     }
     return(TextInfo.CompareOrdinalIgnoreCase(x, y) == 0);
 }
Пример #2
0
 public override int Compare(string x, string y)
 {
     if (object.ReferenceEquals(x, y))
     {
         return(0);
     }
     if (x == null)
     {
         return(-1);
     }
     if (y == null)
     {
         return(1);
     }
     if (this._ignoreCase)
     {
         return(TextInfo.CompareOrdinalIgnoreCase(x, y));
     }
     return(string.CompareOrdinal(x, y));
 }
Пример #3
0
        public static int Compare(String strA, String strB, StringComparison comparisonType)
        {
            // Single comparison to check if comparisonType is within [CurrentCulture .. OrdinalIgnoreCase]
            if ((uint)(comparisonType - StringComparison.CurrentCulture) > (uint)(StringComparison.OrdinalIgnoreCase - StringComparison.CurrentCulture))
            {
                throw new ArgumentException(Environment.GetResourceString("NotSupported_StringComparison"), nameof(comparisonType));
            }
            Contract.EndContractBlock();

            if (object.ReferenceEquals(strA, strB))
            {
                return(0);
            }

            // They can't both be null at this point.
            if (strA == null)
            {
                return(-1);
            }
            if (strB == null)
            {
                return(1);
            }

            switch (comparisonType)
            {
            case StringComparison.CurrentCulture:
                return(CultureInfo.CurrentCulture.CompareInfo.Compare(strA, strB, CompareOptions.None));

            case StringComparison.CurrentCultureIgnoreCase:
                return(CultureInfo.CurrentCulture.CompareInfo.Compare(strA, strB, CompareOptions.IgnoreCase));

            case StringComparison.InvariantCulture:
                return(CultureInfo.InvariantCulture.CompareInfo.Compare(strA, strB, CompareOptions.None));

            case StringComparison.InvariantCultureIgnoreCase:
                return(CultureInfo.InvariantCulture.CompareInfo.Compare(strA, strB, CompareOptions.IgnoreCase));

            case StringComparison.Ordinal:
                // Most common case: first character is different.
                // Returns false for empty strings.
                if (strA.m_firstChar != strB.m_firstChar)
                {
                    return(strA.m_firstChar - strB.m_firstChar);
                }

                return(CompareOrdinalHelper(strA, strB));

            case StringComparison.OrdinalIgnoreCase:
                // If both strings are ASCII strings, we can take the fast path.
                if (strA.IsAscii() && strB.IsAscii())
                {
                    return(CompareOrdinalIgnoreCaseHelper(strA, strB));
                }

#if FEATURE_COREFX_GLOBALIZATION
                return(CompareInfo.CompareOrdinalIgnoreCase(strA, 0, strA.Length, strB, 0, strB.Length));
#else
                // Take the slow path.
                return(TextInfo.CompareOrdinalIgnoreCase(strA, strB));
#endif

            default:
                throw new NotSupportedException(Environment.GetResourceString("NotSupported_StringComparison"));
            }
        }
Пример #4
0
        public bool Equals(String value, StringComparison comparisonType)
        {
            if (comparisonType < StringComparison.CurrentCulture || comparisonType > StringComparison.OrdinalIgnoreCase)
            {
                throw new ArgumentException(Environment.GetResourceString("NotSupported_StringComparison"), nameof(comparisonType));
            }
            Contract.EndContractBlock();

            if ((Object)this == (Object)value)
            {
                return(true);
            }

            if ((Object)value == null)
            {
                return(false);
            }

            switch (comparisonType)
            {
            case StringComparison.CurrentCulture:
                return(CultureInfo.CurrentCulture.CompareInfo.Compare(this, value, CompareOptions.None) == 0);

            case StringComparison.CurrentCultureIgnoreCase:
                return(CultureInfo.CurrentCulture.CompareInfo.Compare(this, value, CompareOptions.IgnoreCase) == 0);

            case StringComparison.InvariantCulture:
                return(CultureInfo.InvariantCulture.CompareInfo.Compare(this, value, CompareOptions.None) == 0);

            case StringComparison.InvariantCultureIgnoreCase:
                return(CultureInfo.InvariantCulture.CompareInfo.Compare(this, value, CompareOptions.IgnoreCase) == 0);

            case StringComparison.Ordinal:
                if (this.Length != value.Length)
                {
                    return(false);
                }
                return(EqualsHelper(this, value));

            case StringComparison.OrdinalIgnoreCase:
                if (this.Length != value.Length)
                {
                    return(false);
                }

                // If both strings are ASCII strings, we can take the fast path.
                if (this.IsAscii() && value.IsAscii())
                {
                    return(CompareOrdinalIgnoreCaseHelper(this, value) == 0);
                }

#if FEATURE_COREFX_GLOBALIZATION
                return(CompareInfo.CompareOrdinalIgnoreCase(this, 0, this.Length, value, 0, value.Length) == 0);
#else
                // Take the slow path.
                return(TextInfo.CompareOrdinalIgnoreCase(this, value) == 0);
#endif

            default:
                throw new ArgumentException(Environment.GetResourceString("NotSupported_StringComparison"), nameof(comparisonType));
            }
        }
Пример #5
0
        public static bool Equals(String a, String b, StringComparison comparisonType)
        {
            if (comparisonType < StringComparison.CurrentCulture || comparisonType > StringComparison.OrdinalIgnoreCase)
            {
                throw new ArgumentException(Environment.GetResourceString("NotSupported_StringComparison"), nameof(comparisonType));
            }
            Contract.EndContractBlock();

            if ((Object)a == (Object)b)
            {
                return(true);
            }

            if ((Object)a == null || (Object)b == null)
            {
                return(false);
            }

            switch (comparisonType)
            {
            case StringComparison.CurrentCulture:
                return(CultureInfo.CurrentCulture.CompareInfo.Compare(a, b, CompareOptions.None) == 0);

            case StringComparison.CurrentCultureIgnoreCase:
                return(CultureInfo.CurrentCulture.CompareInfo.Compare(a, b, CompareOptions.IgnoreCase) == 0);

            case StringComparison.InvariantCulture:
                return(CultureInfo.InvariantCulture.CompareInfo.Compare(a, b, CompareOptions.None) == 0);

            case StringComparison.InvariantCultureIgnoreCase:
                return(CultureInfo.InvariantCulture.CompareInfo.Compare(a, b, CompareOptions.IgnoreCase) == 0);

            case StringComparison.Ordinal:
                if (a.Length != b.Length)
                {
                    return(false);
                }

                return(EqualsHelper(a, b));

            case StringComparison.OrdinalIgnoreCase:
                if (a.Length != b.Length)
                {
                    return(false);
                }
                else
                {
                    // If both strings are ASCII strings, we can take the fast path.
                    if (a.IsAscii() && b.IsAscii())
                    {
                        return(CompareOrdinalIgnoreCaseHelper(a, b) == 0);
                    }
                    // Take the slow path.

#if FEATURE_COREFX_GLOBALIZATION
                    return(CompareInfo.CompareOrdinalIgnoreCase(a, 0, a.Length, b, 0, b.Length) == 0);
#else
                    return(TextInfo.CompareOrdinalIgnoreCase(a, b) == 0);
#endif
                }

            default:
                throw new ArgumentException(Environment.GetResourceString("NotSupported_StringComparison"), nameof(comparisonType));
            }
        }