는 기존 유형 기반 스위칭보다 패턴이 일치합니까?
직접 "유형별"직접 "스위치"를 지원하지 않는 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