-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Description
Background and motivation
There currently doesn't seem to be a means of checking whether the beginning or the end of a string equals to any of the values contained in a specified set of values in an optimized way using SearchValues<string> that was introduced in .NET 9. There are other specialized extension APIs involving ReadOnlySpan<char> and SearchValues<string> that were recently added (e.g. IndexOfAny<T>(ReadOnlySpan<char>, SearchValues<string>), ContainsAny(ReadOnlySpan<char>, SearchValues<string>) et al.) but this particular API seems to be missing.
One use case could be if you need to efficiently check whether a string starts with any one of a particular set of prefixes in order to determine whether your application code supports or handles that particular item.
See also #94155.
API Proposal
namespace System;
public static class MemoryExtensions
{
// Proposed
public static bool StartsWithAny(this System.ReadOnlySpan<char> span, System.Buffers.SearchValues<string> values);
public static bool EndsWithAny(this System.ReadOnlySpan<char> span, System.Buffers.SearchValues<string> values);
}API Usage
var searchValues = SearchValues.Create(new[] { "P1", A99", "B44" }.AsSpan(), StringComparison.Ordinal);
var isSupported = "testValue".StartsWithAny(searchValues);
var isSupported2 = "testValue".EndsWithAny(searchValues);Alternative Designs
N/A
Risks
N/A