C# 3.0 의 Class 타입인 Tuple 과 달리 C# 7.0 에는 Struct 인 ValueType 이 추가가 되었다. 여기에 TupleElementNames Attribute 를 컴파일러가 지원해주어 Item1 이 아니라 원하는 feild name 을 사용할 수 있게 되었다.
또한 값을 할당할 때 기존의 변수를 튜플처럼 모아서 한번에 할당할 수도 있게 되었다.
void Deconstruct(out T x1, out T x2 ...) 를 사용하면 별도의 메소드 없이 값을 분리할 수도 있다.
C# 7.1 부터 Local 에서 초기화 할 때 타입추론과 함께 변수명 이름도 추론할 수 있게 되었다.
Pattern Match (C# 7.0)
C# 7.x 에서는 is 연산자와 switch 문에 Pattern Match 기능이 추가되었다.
c# 8.0 에는 swtich expression 이 나오면서 패턴인식이 막강해졌다. 특히 튜플에서 막강한데 몇가지 팁이 있다.
lambda 등을 이용해서 즉석으로 객체를 튜플로 바꾸거나 (a) => (a.v1, a.v2) switch {}
Deconstruct() 를 이용해 자동으로 튜플로 바꾸면 쉽게 적용할 수 있다.
또한 Property Matching 의 경우 {A: {A1: 1, A2: 2}} 처럼 재귀적으로 이용할 수 있어 편하다.
C# 10.0 에선 {A?.A1: 1, A.A2: 2} 처럼 사용할 수 있어, 중괄호를 줄이고 널체크를 더 쉽게 할 수 있다.
C# 9.0 에는 기본타입에 관계 연산자와 and, or, not 을 쓸 수 있어서 더 다채롭게 쓸 수 있게 되었다.
Type Inference
C# 3.0 에서 할당하는 타입을 알고 있을 때 자동으로 타입을 추론하는 var 이 도입되었다.
C# 9.0 에선 할당되는 타입이 정해져 있으면 Tuple<int, int> a = new(1, 2); 처럼 new 뒤에 타입이 생략 가능하다. 이는 배열 및 컬렉션 코드를 간단하게 해준다.
댓글남기기