TIL

[TIL] 내일배움캠프_Unity 개인과제, 문자열 포맷, 정렬, 입력 경고 메세지

Hwone 2023. 8. 21. 20:27

개인과제로 TextRPG를 만들게 되었다 

예전에 c++로 만든적이 있는데 확실히 문법에 대해 익숙해지는 경험이었는데 C#도 그럴 기회가 생겼다! 

그래서 나는 요새 개인과제에 푹 빠져있다 오늘 배운것들도 다 개인과제 하면서 배웠다 

 

문자열 포맷 

인벤토리를 서식에 맞춰서 출력하기 위해 찾아보다가 시도해본 방법이 

 

Console.WriteLine("{0},-10}", name); 

name을 10개의 문자가 들어갈 공간을 만들어주고 채워넣는다, 부호는 왼쪽/오른쪽 맞춤에 사용된다 

 

PadLeft("문자를 붙인 후 문자열 전체 길이 수 ", 문자열에 붙이고 싶은 문자);

PadRight("문자를 붙인 후 문자열 전체 길이 수", 문자열에 붙이고 싶은 문자);

문자열에 붙이고 싶은 문자를 띄어쓰기로 넣어주면 위와 같이 나타낼 수 있다 

 

하지만 이런 방법은 다른 크기의 문자열 (ex.영어 + 한글) 을 포맷 할 때는 쉽지 않았다 

그래서 나는 그냥 Console.SetCursorPosition을 이용하여 출력 위치를 정해서 만들었다

 

정렬 

아이템을 List로 관리하고 있기에 OrderBy()를 사용하였다 

원래 알고있던 함수였는데 쓰는게 생각보다 쉽지 않아 더 자세하게 찾아보았다 

 

내가 사용한 코드를 분석해보며 설명하자면 

Inventory = Inventory.OrderBy(item => item.StatsType == STATSTYPE.Atk ? 0 : 1).ThenByDescending(item => int.Parse(item.Stats)).ToList();

 

item.StatsType은 enum문으로 조건식을 달아 참이면 0 거짓이면 1 이라는 키 값을 주고 오름차순으로 스탯 타입을 정렬

ThenBy으로 정렬 조건을 하나 더 정할 수 있는데 Descending를 붙여서 내림차순으로 스탯 수치를 정렬하였다 

 

입력 경고 메세지

string? answer = Console.ReadLine(); 

Nullable Reference Type의 일부인 ? 키워드를 사용해 Console.ReadLine()에 대한 경고 메세지를 없애주었다

저 키워드는  타입을 엄격하게 만들어서 null값에 대한 정보를 명시적으로 처리하는 것이다