C# Study/C# 케이스 스터디 맨텀 2022. 12. 20. 20:56
특정 문자열과, 삭제할 단어 혹은 문자가 주어졌을 때, 삭제하거나 교체하는 방법을 알아보도록 하자. 예시 Hello my world! 가 주어졌을 때, o와 y를 제외하고 출력하기 -> Hell m wrld! 기본적인 방법 : Replace 사용하기 myString.Replace("o", "").Replace("y", ""); 오류가 날 여지가 없기 때문에 별도 오류검사를하지 않고 바로 메서드를 연결하면 된다. 하지만 대체해야 되는 문자열의 갯수가 여러개라면 Replace는 방법은 확장성에서 좋은 방법이 아니다. (많아지면 배열에 넣어넣고, 루프 문을 돌릴 수밖에 없다) 심화적인 방법 : Regex.Replace 사용하기 using System.Text.RegularExpressions; // using..
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. 13. 23:12
다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다. 1. 예외에 대한 보증 3가지 1-1) 기본 보증(basic guarantee) 특정 함수 내에서 발생한 예외가 이 함수를 빠져나오더라도 어떤 리소스도 누수되지 않으며, 모든 객체의 상태가 유효한 상태를 유지함을 의미. NET CLR은 기본 보증을 준수한다. 1-2) 강력한 보증(strong guarantee) 기본 보증에 더하여 예외 발생 시에도 프로그램의 상태가 변경되지 않음을 추가로 보증함. LINQ 쿼리를 사용하면 기본적으로 강력한 예외 보증 요건을 준수하게 된다. 함수형 프로그래밍 스타일을 사용할 수 없는 경우 방어적인 프로그램을 위해 기존 데이터의 복사본을 유지하고 작업이 완료된 후 값을 교환하는 방법을 사용하면 된다...