C# 8.0 Switch expression
유용하기도 하고, 길어서 따로 분리했다.
Switch 식을 보다 편리하게 사용 가능하다.
람다식을 사용한다.
바로 예제부터 보자
using System;
public enum DayOfWeek
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
class Program
{
static void Main()
{
int numberOfLetters = day switch
{
DayOfWeek.Monday => 6,
DayOfWeek.Tuesday => 7,
DayOfWeek.Wednesday => 9,
DayOfWeek.Thursday => 8,
DayOfWeek.Friday => 6,
DayOfWeek.Saturday => 8,
DayOfWeek.Sunday => 6,
_ => throw new ArgumentException("Invalid day of week.")
};
}
}
문법이 훨씬 간결해졌다.
또 다른 패턴도 몇가지 보자
Property Pattern (속성 패턴) I
class Program
{
static void Main(string[] args)
{
var character = new Character { Name = "Wizard", Class = "Mage" };
var skill = new Skill { Name = "Fireball", Power = 100 };
// switch expression 사용
var message = character switch
{
{ Class: "Mage" } => $"Using magic skill {skill.Name}",
{ Class: "Warrior" } => $"Using melee skill {skill.Name}",
{ Class: "Archer" } => $"Using ranged skill {skill.Name}",
{ Skill: "Fireball" } => $"Using Fireball {skill.Name}",
_ => $"Unknown character class"
};
Console.WriteLine(message);
}
}
Property Pattern (속성 패턴) II => c# 10.0에서 개선되어서 그 때 다루겠음.
C# 8 : Recursive pattern (재귀 패턴)
재귀 패턴은 특정 클래스나 구조체의 하위 트리를 검색하고자 할 때 유용하다. 재귀적인 호출로 말단의 속성까지 체크를 쉽게 할 수 있기 때문이다.
class Person
{
public string Name { get; set; }
public List<Person> Children { get; set; }
}
static bool HasJohn(Person person)
{
if (person.Children != null)
{
foreach (var child in person.Children)
{
if (HasJohn(child))
{
return true;
}
}
}
return person.Name == "John";
}
자식 중 John이 있는지 없는지 검사하는 코드이다.
'프로그래밍 언어 > c#' 카테고리의 다른 글
C# 9.0 최상위 프로그램, is not, switch문 기능 추가 (0) | 2023.05.16 |
---|---|
C# 9.0 레코드 타입 (1) | 2023.05.16 |
c# 8.0 정리 (0) | 2023.05.14 |
C# Var에 관해서 (0) | 2023.05.01 |
C#7.0 ref local, return, struct, Throw expression (0) | 2023.04.29 |