diff --git a/standard/patterns.md b/standard/patterns.md index 301adb22c..5111f1bb3 100644 --- a/standard/patterns.md +++ b/standard/patterns.md @@ -148,6 +148,7 @@ For a constant pattern `P`, its *converted value* is Given a pattern input value *e* and a constant pattern `P` with converted value *v*, - if *e* has integral type or enum type, or a nullable form of one of those, and *v* has integral type, the pattern `P` *matches* the value *e* if result of the expression `e == v` is `true`; otherwise +- if *e* is of type `System.Span` or `System.ReadOnlySpan`, and *v* is a constant string, and *v* does not have a constant value of `null`, then the pattern is considered matching if `System.MemoryExtensions.SequenceEqual(e, System.MemoryExtensions.AsSpan(v))` returns `true`; otherwise - the pattern `P` *matches* the value *e* if `object.Equals(e, v)` returns `true`. > *Example*: The `switch` statement in the following method uses five constant patterns in its case labels. diff --git a/standard/standard-library.md b/standard/standard-library.md index 153bffed1..fc08f0f7c 100644 --- a/standard/standard-library.md +++ b/standard/standard-library.md @@ -404,6 +404,15 @@ namespace System public abstract class FormattableString : IFormattable { } + public static class MemoryExtensions + { + public static ReadOnlySpan AsSpan (this string? text); + public static bool SequenceEqual (this Span span, ReadOnlySpan other) + where T : IEquatable; + public static bool SequenceEqual (this ReadOnlySpan span, + ReadOnlySpan other) where T : IEquatable; + } + public class OperationCanceledException : Exception { public OperationCanceledException(); @@ -1383,6 +1392,7 @@ The following library types are referenced in this specification. The full names - `global::System.IntPtr` - `global::System.InvalidCastException` - `global::System.InvalidOperationException` +- `global::System.MemoryExtensions` - `global::System.NotSupportedException` - `global::System.Nullable` - `global::System.NullReferenceException`