초보자를 위한 C#의 패턴 일치

C#의 패턴 일치는 개발자가 상속 계층에 의해 연결되지 않은 변수 및 유형이 있는 제어 흐름을 처리하는 데 도움이 됩니다. C# 7.0에서는 패턴 일치가 구현되어 기존 언어 연산자 및 명령문에 기능을 추가했습니다. 그 이후로 패턴 일치 기능은 모든 주요 C# 버전에서 확장되었습니다.

프리미티브는 여전히 if/else와 정렬해야 하지만 자신의 데이터를 포함하여 모든 유형의 데이터에서 패턴 일치를 수행할 수 있습니다. 또한 패턴 일치는 표현식 값을 추출합니다.

이 블로그에서는 몇 가지 패턴 일치 기능에 대해 간략하게 설명합니다.

is 유형 패턴 표현식



is 형식 식은 C#에서 지정된 type.is 형식 패턴 일치와 개체의 호환성을 테스트하여 제어 흐름에서 형식을 사용할 수 있도록 하며 사용된 논리는 형식 기반 대 리터럴 값입니다.

다음 코드 예제를 고려하십시오. 이 코드는 수학, 과학 및 영어의 세 가지 클래스를 정의합니다.

public class Mathematics
{
    public double Score { get; set; }   
    public string GetSubjectDetails() => "Mathematics class";
}
public class Science
{
    public double Score { get; set; }   
    public string GetSubjectDetails() => "Science class";
}
public class English
{ 
    public double Score { get; set; }   
    public string GetSubjectDetails() => "English class";
}


이제 is 유형을 사용하여 주제 유형에 대해 코딩할 수 있습니다. 다음 코드 스니펫은 예제를 제공합니다.

public static string GetSubjectDetails (object subject)
{
    if (subject is English e)
         return e.GetSubjectDetails ();    

    if (subject is Science s)
         return s.GetSubjectDetails ();

   if (subject is Mathematics m)
         return m.GetSubjectDetails ();

   throw new ArgumentException("unsupported subject type", nameof(subject));
}


is 표현식은 변수를 확인하고 적합한 새로운 유형의 변수에 할당합니다. *is* 유형 표현식은 값과 참조 유형 모두에서 작동합니다.

Switch 문



고정 값 대신 switch case 문 패턴은 switch 값을 표현식에서 반환된 다른 값과 비교할 수 있도록 하여 케이스 블록을 개선합니다.

값을 확인하고 조건 확인을 기반으로 일부 작업을 수행하기 위해 when/case 표현식을 사용하여 이를 수행할 수 있습니다.

public static string GetSubjectScore(object subject)
{
     switch (subject)
     {
          case Mathematics m when m.Score >= 90:
                   //Go to the grade calculation.
          case Science s:
                   //Get the subject details.
          case var sub when (sub.Equals(100)):
                    //Got the centum. 
          case null:
                   //Code logic go here.
          default:
               throw new ArgumentException("Unsupported subject type", nameof(subject));
    }
}


위의 예에서 null, default, 유형 검사, 조건 및 유형 검사가 없는 조건의 사용( case var )에 대한 case 문을 볼 수 있습니다. case var 도 null 과 일치할 수 있으므로 이를 방지하기 위해 case null 아래에 넣습니다.

고전적인 스위치 인수에서는 상수만 허용되었습니다. 패턴 매칭에서 패턴 케이스의 순서는 동적 조건으로 인해 중요합니다.

스위치 표현식은 C# 8.0에 추가되었습니다. 스위치 표현식은 다른 값을 기반으로 특정 결과를 반환하는 짧은 접근 방식입니다. switch 표현식에는 case 키워드가 필요하지 않습니다. 화살표( => )는 콜론( : )을 대신합니다. _(밑줄)는 키워드 기본값을 대체합니다.

다음 코드 스니펫은 스위치 표현식을 사용하여 주제 점수를 계산합니다.

var (score1, score2, option) = (50, 40, +);
var score = option switch
{
    + => score1 + score2,
    - => score1 - score2,
    _ => 0
};
Console.WriteLine("Score Details: " + score);


관계형 및 논리적 패턴



C# 9 버전은 관계형 및 논리적 패턴을 지원합니다.

관계 연산자 < , >, <= 및 >=를 사용할 수 있습니다. 관계형 패턴에서 범위를 표현하려면 to 키워드를 사용하십시오.

and, or, not과 같은 논리 연산자를 사용할 수 있습니다.

관계형 및 논리적 패턴을 사용하여 다음 코드는 과목 등급을 표시합니다.

var subjectScore = 90;
var grade = subjectScore switch
{
    100 => Grade O,
    >= 90 and <= 99 => Grade A,
    75 to 89 => Grade B,
    > 60 => Grade C
};
Console.WriteLine("Subject Grade: " + grade);


결론



이 블로그 게시물에서 패턴 일치에 대한 C#의 지원을 살펴보았습니다. 패턴 일치는 모든 데이터 유형에서 작동합니다. 표현식을 테스트하고 표현식이 일치할 때 조치를 취하기 위한 보다 간결한 구문을 제공합니다. C#에서 이러한 패턴 일치 개념을 시도하고 생산성을 향상시키십시오!

Syncfusion has over 1,600 components and frameworks for .NET MAUI(Preview) , WinForms , WPF , WinUI , ASP.NET ( Web Forms , MVC , Core ), UWP , Xamarin , Flutter , JavaScript , Angular , Blazor , Vue , and React . 이를 사용하여 애플리케이션 개발 속도를 높이십시오.

우려 사항이 있거나 설명이 필요한 경우 아래 의견 섹션에 언급하십시오. support forums , Direct-Trac 또는 feedback portal 을 통해 연락할 수도 있습니다.

관련 블로그





  • Create ZUGFeRD-Compliant PDF Invoice in C#
  • 좋은 웹페이지 즐겨찾기