Today I Learned :
- 백준 허브 업로드 타이밍
- 백준은 결과 완료시 바로 업로드
- 프로그래머스는 결과 후 화면에서 잠시 기다려야 올라감(체크표시 뜨면 완료)
- Linq Any절 - where를 쓰지않고 바로 any로 탐색
// 배열에 -10000 미만 또는 10000 이상의 값이 있는지 확인
if (numbers.Any(x => x < -10000 || x >= 10000))
{
// 예외 발생
throw new ArgumentOutOfRangeException("배열에 -10000 미만 또는 10000 이상의 값이 있습니다.");
}
- C#의 foreach는 순서를 보장한다.
- 배열 : 배열은 순서가 보장된다.
- 리스트 : C#의 리스트는 내부적으로 배열을 기반으로한 동적 배열이며, 순서가 보장된다.
(C++은 이중링크드리스트) - 딕셔너리 : C# 6.0 이상에서는 열거 순서가 입력순서를 따르도록 변경되었다.
이전 버전에서는 순서가 보장되지 않는다. - "일반적으로 IEnumerable<T>를 구현하는 컬렉션은 순서가 보장되는 경향이 있습니다." 라고 한다.
- Array.Empty<Item>() : 빈어레이 생성
- List 에서 특정 밸류로 카운트 하기
// 특정 값을 확인하여 카운트
return QuestList.Count(q => q.State != QuestState.Completed);
- 빌드 시 파일 복사하기
Json 데이터 컨트롤
Json 데이터를 읽어와 세팅하는 메소드
private void SetStats()
{
string jsonFilePath = "data/Class.json";
string jsonContent = File.ReadAllText(jsonFilePath);
JsonDocument ClassObj = JsonDocument.Parse(jsonContent);
JsonElement jobObj = ClassObj.RootElement.GetProperty("CharacterClass").GetProperty(Job.ToString());
//Debug.WriteLine(jobObj.ToString());
AttPow = jobObj.GetProperty("AttPow").GetInt32();
BaseAttPow = AttPow;
DefPow = jobObj.GetProperty("DefPow").GetInt32();
BaseDefPow = DefPow;
MaxHealth = jobObj.GetProperty("MaxHealth").GetInt32();
Health = jobObj.GetProperty("Health").GetInt32();
MaxMana = jobObj.GetProperty("MaxMana").GetInt32();
Mana = jobObj.GetProperty("Mana").GetInt32();
Gold = jobObj.GetProperty("Gold").GetInt32();
Debug.WriteLine(jobObj.GetProperty("Skill")[0]);
Debug.WriteLine(jobObj.GetProperty("Skill")[1]);
for (int i = 0; i < jobObj.GetProperty("Skill").GetArrayLength(); i++)
{
JsonElement skill = jobObj.GetProperty("Skill")[i];
if (Enum.TryParse<SkillType>(skill.GetProperty("SkillType").GetString(), out SkillType thisType))
{
Skill.Add(new Skill(
skill.GetProperty("Name").GetString(),
skill.GetProperty("DamagePercentage").GetSingle(),
skill.GetProperty("Mana").GetInt32(),
thisType
));
}
}
}
Enum.TryParse<>
읽어온 스트링을 Enum으로 변환
// JSON에서 "type" 속성 값을 읽어옴
string skillTypeString = document.RootElement.GetProperty("type").GetString();
// 문자열을 enum으로 변환
if (Enum.TryParse<SkillType>(skillTypeString, out SkillType result))
{
return result;
}
else
{
// 변환 실패 시 기본값 또는 예외 처리
throw new ArgumentException($"Invalid SkillType: {skillTypeString}");
}
'TIL' 카테고리의 다른 글
20240116 TIL (0) | 2024.01.16 |
---|---|
20240115 TIL (1) | 2024.01.15 |
20240111 TIL (1) | 2024.01.11 |
20240110 TIL (0) | 2024.01.10 |
20240109 TIL (0) | 2024.01.09 |