목록을 패턴 매칭에 사용할 수 있게 되었습니다.
| 목록 패턴
var list = new[] { 1, 2, 3, 4, 5 };
var list2 = new[] { 1, 2, 3, 7, 5 };
Print(list is [1, 2, 3, 4, 5]);
Print(list is [1, .., 5]);
Print(list is [1, .., 4]);
Print(list is [1, .., var x, 5] && x is 4);
Print(list2 is [1, 2, 3, 4, 5]);
Print(list2 is [1, .., 5]);
Print(list2 is [1, .., var y, 5] && y is 7);
출력을 편하게 하기 위해 CallerArgumentExpression
특성을 이용했습니다. 이 특성을 이용하면 인자에 전달되는 코드를 문자열로 메소드에서 사용할 수 있습니다.
void Print(object? value, [CallerArgumentExpression("value")] string? argumentExpression = null)
{
System.Console.WriteLine($"{argumentExpression}: {value}");
}
| 출력
list is [1, 2, 3, 4, 5]: True
list is [1, .., 5]: True
list is [1, .., 4]: False
list is [1, .., var x, 5] && x is 4: True
list2 is [1, 2, 3, 4, 5]: False
list2 is [1, .., 5]: True
list2 is [1, .., var y, 5] && y is 7: True
오… 신기합니다. 잘되네요!