Favicon

Discard, var patterns

Peponi1/8/20252m

C#
SyntaxKeywordPattern_var

1. Introduction

다음 C# 식과 문은 패턴을 지원한다.

여기서는 다음 패턴을 설명한다.

  • 무시 (_) 패턴 : null을 포함한 모든 식을 매칭한다.
  • var 패턴 : null을 포함한 모든 식을 매칭하고 지역 변수에 할당한다.

2. 무시 패턴

_ 패턴은 switch 식에만 사용이 가능하고, switch 문의 default와 같은 기능을 한다. switch 식에서 _를 사용하지 않고 모든 경우를 커버하지 못하면 컴파일러는 경고를 생성한다. (CS8509)

int? foo = null;
 
Console.WriteLine(foo switch
{
    1 => 1,
    2 => 2,
    _ => "Not recognized"
});
 
/* output:
Not recognized
*/

3. var 패턴

var 패턴의 형식은 패턴에 대응하는 컴파일 타임 형식으로, 중간 결과 저장이 용이하다.

public record CartesianCoordinate2D(int X, int Y);
 
// Some codes...
 
var foo = new CartesianCoordinate2D(-10, 2);
Console.WriteLine(GetValidCutOff(foo));
 
CartesianCoordinate2D GetValidCutOff(CartesianCoordinate2D? coord)
{
    if (coord is not null and var (x, y))
    {
        if (x < 0) x = 0;
        if (y < 0) y = 0;
        return new(x, y);
    }
    throw new ArgumentNullException($"{nameof(coord)}", $"{nameof(coord)} could not be null");
}
 
/* output:
CartesianCoordinate2D { X = 0, Y = 2 }
*/

4. 참조 자료