Skip to content

[API Proposal]: ReadOnlySpan<char>.StartsWithAny(SearchValues<string>) and ReadOnlySpan<char>.EndsWithAny(SearchValues<string>) #110115

Open
@silkfire

Description

@silkfire

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    api-suggestionEarly API idea and discussion, it is NOT ready for implementationarea-System.Memory

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions