C# Study/C# 케이스 스터디 맨텀 2021. 11. 21. 18:12
#. 숫자 변환에서 오류가 발생하다 게임 개발 중 데이터를 다루다 보면 string에서 float로 파싱 하여 사용하는 경우가 자주 발생한다. 예를 들어, 특정 시간 동안 진행되는 이벤트를 구현하는 경우 다음과 같은 코드를 사용할 것이다. string squenceStr = "0.3"; float time = float.Parse(squenceStr); 너무 당연한 코드고 문제 될 것 없어 보인다. 한국이나 미국 같은 일반적인 문화권에서 서비스하는 경우라면 말이다. 숫자 표기는 나라에 따라 다르다! 한 모바일 게임을 라이브 서비스하던 중, 당신의 게임은 러시아 시장에 진출하기로 결정했다. 러시아 쪽 로컬라이징도 완료했고, 기기 테스트로도 러시아어로 문제없이 동작하는 것까지 확인했다. 그러나 출시를 한 뒤..
C# Study/C# 케이스 스터디 맨텀 2021. 11. 2. 19:50
C# 7.0과 8.0 에서 switch의 활용성이 꽤 높아졌는데, 대부분은 기본 siwtch 로도 충분하지만 추가된 기능들을 이용하면 좀 더 간결하고 명시적으로 사용할 수 있다. 1. 기본 방법 string DebugGetColor2(int n) { int k = n % 4; switch (k) { case 0: return "red"; case 1: return "yellow"; case 2: return "blue"; case 3: return "green"; default: return "white"; }; } 2. C# 8.0 의 switch식 string DebugGetColor2(int n) { int k = n % 4; return k switch { 0 => "red", 1 => "yell..
C# Study/C# 케이스 스터디 맨텀 2021. 9. 26. 16:52
StackOverflow https://stackoverflow.com/questions/937181/c-sharp-pattern-to-prevent-an-event-handler-hooked-twice event, Action은 꽤 많이 사용하는 편인데 가끔씩 초기화 코드가 중복되면서 이벤트가 중복 호출되는 문제가 발생하기 쉽다. 그런데 이런 휴먼에러가 발생하면 이벤트 쪽은 이원화되어 있기 때문에 오류를 발견하기 어렵다.. 1. 방법 1 : 명시적으로 제거하기 using System.Linq; private EventHandler foo; public event EventHandler Foo { add { if (foo == null || !foo.GetInvocationList().Contains(v..
C# Study/C# 케이스 스터디 맨텀 2021. 9. 21. 22:37
Enum.Parse csv 데이터 등으로 기획 데이터를 사용할때 string 값을 사용하여 enum값으로 변환해야하는 경우가 종종 생긴다. 아래의 코드로 string 값을 특정 enum으로 변환이 가능함. (MyEnum)System.Enum.Parse(typeof(MyEnum), mystring) MSDN : Enum.Parse 메서드 https://docs.microsoft.com/ko-kr/dotnet/api/system.enum.parse?view=net-5.0 구현으로 가보면 영문자의 대소문자를 무시하는 것도 가능하다! 난 이 구현을 모르고 확장 메서드로 매번 첫번째 글자만 UpperCase로 변환한 다음에 넘겨줬었다.. public static object Parse(Type enumType, ..
C# Study/C# 케이스 스터디 맨텀 2021. 5. 9. 18:32
인스턴스의 초기화 순서를 알아두면 초기화 시점에 따른 초기화 오류를 방지할 수 있다. 멤버 초기화 구문 - 멤버 초기화 구문에 의해 생성된 코드는 생성자 본문 앞에 덧붙여진다. (즉, 생성자보다 '먼저' 호출된다고 생각하면 된다) - 멤버초기화는 생성자보다 먼저 호출된다. 정적 생성자 - 첫 번째 인스턴스가 만들어지거나 정적 멤버가 참조되기 전에 호출된다. - 정적 생성자는 인스턴스 생성자보다 먼저 호출된다. 전체 초기화 순서 - 두 가지 순서를 확장해서 살펴보면 크게 정적 필드 초기화 -> 정적 생성자 -> 인스턴스 필드 초기화 -> 인스턴스 생성자의 호출 순서를 가지는 것을 알 수 있다. 1. 정적 변수의 메모리를 0으로 초기화 2. 정적 변수 초기화 3. 베이스 클래스의 정적 생성자 호출 4. 정적..
C# Study/C# 케이스 스터디 맨텀 2021. 4. 30. 16:12
세 가지 컬렉션 모두 해시 기반이기 때문에 검색의 복잡도가 O(1)로 굉장히 빠르다. 순서가 존재하지 않으며 수학에서의 '집합' 개념에 해당한다. 1. Dictionary - 세 가지 컬렉션 중 가장 많이 사용되고 익숙한 자료구조. - Key와 Value를 사용하여 자료를 저장한다. - 중복 Key를 허용하지 않는다. - 제네릭으로 키와 밸류의 타입을 미리 정할 수 있어 박싱과 언박싱이 발생하지 않는다. var dict = new Dictionary(); dict.Add("A", 1); dict.Remove("A"); int myNum = dict["A"]; 2. HashTable - Key와 Value를 사용하여 자료를 저장한다. - 중복 Key를 허용하지 않는다. - Key와 Value 둘 다 Obj..