C# 11: Span/ReadOnlySpan 패턴 매칭
지금까지 문자열(string)에 대한 패턴 매칭은 널리 사용되어 왔었는데, Span<char>과 ReadOnlySpan<char> 타입에 대해서는 패턴 매칭이 지원되지 않았었다. Span<char>과 ReadOnlySpan<char>은 문자열보다 성능(performance)이 더 좋기 때문에, .NET에서 string 대신 Span/ReadOnlySpan 을 사용하도록 많은 API들이 추가되고 있다.
이러한 맥락에서 Span<char>과 ReadOnlySpan<char>를 보다 널리 사용되도록 하기 위해, C# 11에서는 Span<char>과 ReadOnlySpan<char> 타입을 상수와 비교하는 패턴 매칭을 지원하게 되었다.
아래 예제는 ReadOnlySpan<char> 파라미터를 is 혹은 == 연산자를 사용하여 문자열 상수와 비교하거나, switch expression 패턴을 사용하여 여러 문자열 리터럴들과 비교하는 것을 예시한 것이다.
이러한 맥락에서 Span<char>과 ReadOnlySpan<char>를 보다 널리 사용되도록 하기 위해, C# 11에서는 Span<char>과 ReadOnlySpan<char> 타입을 상수와 비교하는 패턴 매칭을 지원하게 되었다.
아래 예제는 ReadOnlySpan<char> 파라미터를 is 혹은 == 연산자를 사용하여 문자열 상수와 비교하거나, switch expression 패턴을 사용하여 여러 문자열 리터럴들과 비교하는 것을 예시한 것이다.
예제
bool CheckGroup(ReadOnlySpan<char> s)
{
// is 비교
if (s is "admin") return true;
// == 연산자로 비교
if (s == "supervisor") return true;
// switch expression 패턴
bool pass = s switch
{
"IT" => true,
"HR" => true,
_ => false
};
return pass;
}
// 테스트
ReadOnlySpan<char> s = "IT".AsSpan();
bool ok = CheckGroup(s);
Console.WriteLine(ok);
{
// is 비교
if (s is "admin") return true;
// == 연산자로 비교
if (s == "supervisor") return true;
// switch expression 패턴
bool pass = s switch
{
"IT" => true,
"HR" => true,
_ => false
};
return pass;
}
// 테스트
ReadOnlySpan<char> s = "IT".AsSpan();
bool ok = CheckGroup(s);
Console.WriteLine(ok);