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