Improve String.EndsWith for OrdinalIgnoreCase (#72750)
authorEgor Bogatov <egorbo@gmail.com>
Mon, 25 Jul 2022 19:03:24 +0000 (21:03 +0200)
committerGitHub <noreply@github.com>
Mon, 25 Jul 2022 19:03:24 +0000 (21:03 +0200)
src/libraries/System.Private.CoreLib/src/System/String.Comparison.cs

index 76d8ac6..4469a15 100644 (file)
@@ -570,9 +570,10 @@ namespace System
                     return (uint)offset <= (uint)this.Length && this.AsSpan(offset).SequenceEqual(value);
 
                 case StringComparison.OrdinalIgnoreCase:
-                    return this.Length < value.Length ?
-                            false :
-                            (Ordinal.CompareStringIgnoreCase(ref Unsafe.Add(ref this.GetRawStringData(), this.Length - value.Length), value.Length, ref value.GetRawStringData(), value.Length) == 0);
+                    return Length >= value.Length &&
+                        Ordinal.EqualsIgnoreCase(ref Unsafe.Add(ref GetRawStringData(), Length - value.Length),
+                                                 ref value.GetRawStringData(),
+                                                 value.Length);
 
                 default:
                     throw new ArgumentException(SR.NotSupported_StringComparison, nameof(comparisonType));