enum MoveKey{ Up, Down, Left, Right} //열거형의 이름과 멤버들의 이름 작성
static void Main()
{
MoveKey key = MoveKey.Up;
switch(key){
case MoveKey.Up;
//위 행동정의
break;
case MoveKey.Down;
//아래행동 정의
break;
case MonveKey.Left;
//왼쪽 행동 정의
break;
case MoveKey.Right;
//오른쪽 행동 정의
break;
}
위와 같이 코드의 가독성을 올리는데 유용하다.
enum Season()
{
Spring, //0
Summer = 20, //20
Autumn, //21
Winter //22
}
열거형 변수를 (int)를 사용하여 형변환 했을 때 해당 enum값에 값을 지정해줄 수 있다.
시작은 0이며 중간에 특정값을 설정하면 그 이후는 해당 값 +1 로 저장됨.
열거형 비트플래그 활용
[Flags]
enum Day
{
None = 0b_0000_0000, //0
Monday = 0b_0000_0001, //1
Tuesday = 0b_0000_0010, // 2
Wednesday = 0b_0000_0100, // 4
Thursday = 0b_0000_1000, // 8
Friday = 0b_0001_0000, // 16
Saturday = 0b_0010_0000, // 32
Sunday = 0b_0100_0000, // 64
Weekend = Saturday | Sunday //or 연산
}
static void Main()
{
Day meetingDays = Day.Monday | Day.Wednesday;
Console.WriteLine(meetingDays); //Monday,Wednesday
meetingDays |= Day.Friday; //비트마스킹을 이용한 추가
Console.WriteLine(meetingDays); //Monday,Wednesday,Friday;
meetingDays &= ~Day.Wednesday; //비트마스킹을 이용한 제거
Console.WriteLine(meetingDays); //Monday,Friday
bool isMeetingOnMonday = (meetingDays & Day.Monday) != Day.None; //비트마스킹을 이용한 확인
Console.WriteLine(isMeetingOnMonday); //true
}
간단한 데이터 구조에서 여러 데이터 요소를 그룹화 하는 간결한 구문을 제공
static void Main()
{
(double, int) t1 = (4.7, 3); //이름을 지정하지 않을경우 Item1, Item2로 초기화
Console.WriteLine("튜플의 첫번쨰 데이터 {0}, 두번쨰 데이터 {1}",t1.item1, t1.item2);
(double A1, int B2) t2 = (4.5, 3);
Console.WriteLine("튜플의 첫번째 데이터 {0}, 두번째 데이터 {1}",t1.A1, t1.B2);
//튜플의 비교는 튜플 요소 순서에 따라 데이터 끼리 비교
(int a, double b) left1 = (5, 10);
(double a, int b) right1 = (5, 10);
Console.WriteLine(left1 == right1); //output : true
(int a, double b) left2 = (5,10);
(double b, int a) right2 = (10,5);
Console.WriteLine(left2 == right2); //output : false
}
//함수의 반환형으로 사용하여 여러 데이터를 한꺼번에 전달이 가능함
(int min, int max) FindMinMax(int[] input)
{
return (input.Min(), input.Max());
}
사용 방법 : struct 구조체 이름 {구조체 내용}
구조체 내용으로는 변수와 함수가 포함이 가능함
struct Student
{
public string name;
public int mathGrade;
public int englishGrade;
public int height;
public float GetAverage()
{
return (mathGrade + englishGrade) / 2f;
}
}
static void Main()
{
Student kim;
kim.name = "Kim";
kim.mathGrade = 20;
kim.englishGrade = 70;
kim.height = 175;
Console.Write("{0}의 평균 점수는",kim.name);
Console.WriteLine(kim.GetAverage()); //구조체내의 함수에 접근하기위해 . 사용
}
구조체 초기화 및 기본값
struct Player
{
public string name;
public int hp;
public int mp;
public Player(string name, int hp)
{
//초기화에서 모든 구조체 변수를 초기화하지않으면 error발생
this.name = name;
this.hp = hp;
this.mp = 0;
}
public Player(string name, int hp, int mp) : this(name, hp) //이전 초기화를 사용하여 간단히
{
this.mp = mp;
}
}
static void Main()
{
Player player1;
player1.name = "마법사";
player1.hp = 5;
Player player2 = new Player();
Console.WriteLine("{0}, {1}, {2}", player2.name, player2.hp, player2.mp); //output : "", 0 , 0
Player player2 = new Player(name = "전사" , hp = 30);
Console.WriteLine("{0}, {1}, {2}", player2.name, player2.hp, player2.mp); //output : "전사", 30. 0
Player player2 = new Player("궁수", 20, 10);
Console.WriteLine("{0}, {1}, {2}", player2.name, player2.hp, player2.mp); //output : "궁수", 20, 10
}