- 선언 패턴 주어진 식이 특정 형식과 일치하는지를 평가
object foo = 23;
if (foo is int bar)
{
Console.WriteLine(bar);
}
- 형식 패턴 형식 패턴은 선언 패턴과 거의 같은 방식으로 동작 단, 변수 생성 없이 형식 일치 여부만 테스트
object foo = 23;
if (foo is int)
{
Console.WriteLine(bar);
}
- 상수 패턴 식이 특정 상수와 일치하는지를 검사
var GetContryCode = (string nation) => nation switch
{
"KR" => 82,
"US" => 1,
"UK" => 44,
_ => throw new ArgumentException("Not supported Code")
};
Console.WriteLine(GetContryCode("KR"));
Console.WriteLine(GetContryCode("US"));
Console.WriteLine(GetContryCode("UK"));
- 프로퍼티 패턴 식의 속성이나 필드가 패턴과 일치하는지를 검사
class Car
{
public string Model { get; set; }
public DateTime ProdoucedAt { get; set; }
}
static string GetNickname(Car car)
{
var GenerateMessage = (Car car, string nickname) =>
$"{car.Model} produced in {car.ProducedAt.Year} is {nickname}";
if (car is Car { Model : "Mustang", Produced At Year : 1967 })
return GenerateMessage(car, "Faskback");
else if (car is Car { Model : "Mustang", Produced At Year : 1976 })
return GenerateMessage(car, "Cobra II");
else
return GenerateMessage(car, "Unknown");
}
관계 패턴
관계{ 연산자를 이용하여 입력받은 식을 상수와 비교
관계 연산자 : >, >=, ==, !=, <, <=논리 패턴
복수의 패턴을 패턴 논리 연산자로 조합괄호 패턴
괄호로 패턴을 감쌈위치 패턴
식의 결과를 분해하고 분해된 값들이 내장된 복수의 패턴과 일치하는지를 검사.
내장되는 패턴에는 형식패턴, 상수패턴 등 모든 패턴 사용 가능var 패턴
null을 포함한 모든 식의 패턴 매칭을 성공시키고, 그 식의 결과를 변수에 할당.
식의 결과를 임시 변수에 할당한 다음 추가적인 연산을 수행하고자 할때 유용.
var IsPassed =
(int[] scores) => scores.Sum() / scores.Length is var average
&& average >= 60;
int[] scores; = { 90, 80, 60, 80, 70 };
Console.WriteLine{$"{string.Join(",", score1)} : Pass : {IsPassed(scores1)}"};
int[] scores; = { 90, 80, 59, 80, 70 };
Console.WriteLine{$"{string.Join(",", score1)} : Pass : {IsPassed(scores2)}"};
무시 패턴
var 패턴 처럼 모든 식과의 패턴 일치 검사를 성공
단, is 식에서는 사용할 수 없고, switch 식에서만 사용 가능.목록 패턴
배열이나 리스트가 패턴의 시퀀스가 일치하는 지를 검사.
패턴의 시퀀스는 [] 사이에 패턴의 목록을 입력하여 생성
Top comments (0)