"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 패턴이 C#의 기존 유형 기반 스위칭에 대한 우수한 대안 일과 일치합니까?

패턴이 C#의 기존 유형 기반 스위칭에 대한 우수한 대안 일과 일치합니까?

2025-03-23에 게시되었습니다
검색:832

Is Pattern Matching a Superior Alternative to Traditional Type-Based Switching in C#?

는 기존 유형 기반 스위칭보다 패턴이 일치합니까?

직접 "유형별"직접 "스위치"를 지원하지 않는 C#과 같은 언어로 프로그래머는 일반적으로 유형 기반 스위칭을 시뮬레이션하기 위해 클래식 "if ... else ... else"구조를 사용합니다. 그러나 관련된 유형의 수가 증가함에 따라이 접근법은 길고 깨지기 쉽습니다.

패턴 일치 C# 7 이상

C# 7부터 시작하여 패턴 매칭은 유형별로 전환하는보다 우아하고 간결한 방법을 제공합니다. "Case Type"구문을 사용하면 변수 유형과 일치하여 "if"문을 특정 패턴의 경우를 효과적으로 대체 할 수 있습니다.

예를 들어:

void Foo(object o)
{
    switch (o)
    {
        case A a:    // 匹配A类型
            a.Hop();
            break;
        case B b:    // 匹配B类型
            b.Skip();
            break;
        default:
            throw new ArgumentException("意外类型: "   o.GetType());
    }
}

c# 6 nameof ()

C# 6에서는 () 연산자를 사용하여 스위치 문에 대해 유형 이름을 동적으로 가져올 수 있습니다. 패턴 일치만큼 간결하지는 않지만 하드 코딩 된 유형 이름을 피하는 더 쉬운 대안을 제공합니다.

void Foo(object o)
{
    switch (o.GetType().Name)
    {
        case nameof(A):
            // 处理A类型
            break;
        case nameof(B):
            // 处理B类型
            break;
        default:
            // 处理其他类型
            break;
    }
}

C# 5 이상의 이전 스위치

C# 5 이하의 경우, 당신은 하드 코드 유형 이름을 가진 기본 "if ... else ... else"구조를 사용하는 것 외에는 선택의 여지가 없습니다. 이 접근법은 서투르고 오류가 발생할 수 있습니다.
void Foo(object o)
{
    if (o is A)
    {
        // 处理A类型
    }
    else if (o is B)
    {
        // 处理B类型
    }
    else
    {
        // 处理其他类型
    }
}

결론에서

C# 7 이상의 패턴 일치는 유형 기반 스위칭을 시뮬레이션하는 강력하고 간결한 방법을 제공합니다. 조건부 체인의 필요성을 제거하고 코드 가독성을 향상 시키며 오류 가능성을 줄입니다. 이전 버전의 C#의 경우, () 및 스위치 문을 사용하여 하드 코딩 된 유형 이름보다 유연한 대안을 제공하는 반면, 클래식 "if ... else ... else"구조는 여전히 덜 이상적이지만 여전히 실행 가능한 옵션입니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3