8. 리터럴에 대한 표현 방법 개선

숫자가 클때 가독성이 떨어질때가 많은에 아래처럼 숫자사이에 _ 를 붙여 사용이 가능하다.

int num1 = 10000000;

int num2 = 10_000_000; // 천단위로 끊어서 볼수 있어 가독성이 좋아진다.

모든 숫자 데이터에 적용이 가능하기때문에 16진수 2진수 표현에도 사용이 가능하다.

 

9. 패턴 매칭

1) 연산자의 패턴매칭

 예전에는 is, as 를 구분하여 사용했지만

object obj = new List<string>();
List<string> list = obj as List<string>;
list?.ForEach((e) => Console.WriteLine(e));

7.0 부터는 is 가 as 역할을 수행할수 있아 아래처럼 사용이 가능하다.

object obj = new List<string>();
if (obj is List<string> list)
{
    list.ForEach((e) => Console.WriteLine(e));
}

var 패턴의 경우 사용예시이다 var 패턴은 반드시 변수명이 필요하다. 무조건 is 결과가 true 이므로 의미가 없다.

if (item is var elem) // 타입 패턴과는 달리 변수명을 생략할 수 없다. 무조건 true
{
    Console.WriteLine(elem);
}

 

2) switch/case 문의 패턴 매칭

아래처럼 상수 패턴을 사용할수 있고 타입도 사용하면서 바로 변수에 대입하여 사용할수도 있다.

var objTestList = new List<object>();

foreach (object obj in objTestList)
{
    switch (item)
    {
        case 100: // 상수 패턴
            break;
        case null: // 상수 패턴
            break;
        case DateTime dt: // 타입 패턴 (값 형식) – 필요 없다면 dt 변수 생략 가능
            break;
        case ArrayList arr: // 타입 패턴 (참조 형식) – 필요 없다면 arr 변수 생략 가능
            break;
        case var element: // Var 패턴 (이렇게 사용하면 default와 동일)
            break;
    }
}

또한 switch 에서 when 예약어 기능을 사용할수 있어 아래처럼 사용이 가능하다.

int checkNum = 301;
switch (checkNum)
{
    case int num when checkNum > 300: // int 타입이고 그 값이 300보다 큰 경우
        break;
    default:
        break;
}

위와같이 쓰면 case 의 순서가 중요해진다.

 상위의 case 조건에서 이미 만족한다면 그 절의 코드가 실행되고 그 하위의 case 조건 에 대한 평가는 무시된다.

+ Recent posts