System.MemoryExtensions contains methods that compare contents of Spans.
Working with .NET Core that supports implicit conversions between String and ReadOnlySpan<char>, you would have:
ReadOnlySpan<char> myString = "function";
if (MemoryExtensions.Equals(myString, "function", StringComparison.Ordinal))
{
    return TokenType.Function;
}
else if (MemoryExtensions.Equals(myString, "...", StringComparison.Ordinal))
{
    ... 
}
I'm calling the MemoryExtensions.Equals explicitly here because that way it is happy with the implicit conversion of the string literal (e.g. "function") to a ReadOnlySpan<char> for comparison purposes. If you were to call this extension method in an object-oriented way, you would need to explicitly use AsSpan:
if (myString.Equals("function".AsSpan(), StringComparison.Ordinal))
If you are particularly attached to the switch statement, you could abuse the pattern matching feature to smuggle the comparisons in, but that would not look very readable or even helpful:
ReadOnlySpan<char> myString = "function";
switch (myString)
{
    case ReadOnlySpan<char> s when MemoryExtensions.Equals(s, "function", StringComparison.Ordinal):
        return TokenType.Function;
        break;
    case ReadOnlySpan<char> s when MemoryExtensions.Equals(s, "...", StringComparison.Ordinal):
        ...
        break;
}
If you are not using .Net Core and had to install the System.Memory NuGet package separately, you would need to append .AsSpan() to each of the string literals.