본문 바로가기
반응형

Effective C#21

[Effective C#] Item 50 예외 필터의 다른 활용 예를 살펴보라 예외필터를 통해 다양한 방법으로 여러가지 기능을 제공할 수 있다. 첫번째로 항상 false만을 반환하여 제한된 타입에 대해서만 로그를 출력할 수 있다. try { data = MakeWebRequest(); } catch (Exception e) when (ConsoleLogException(e)) { } catch (TimeoutException e) when (failures++ < 10) { WriteLine("Timeout error: trying again"); } public static bool ConsoleLogException(Exception e) { var oldColor = Console.ForegroundColor; Console.ForegroundColor = ConsoleCol.. 2023. 6. 12.
[Effective C#] Item 49 catch 후 예외를 다시 발생시키는 것보다 예외 필터가 낫다. 예외가 발생한 이후 catch 구문에서 어떠한 조건을 넣으려고 할 때 되도록 if 구문보다 아예 catch에서 when 키워드를 통해 조건을 거는 것이 좋다. var retryCount = 0; var dataString = default(String); while (dataString == null) { try { dataString = MakeWebRequest(); } catch (TimeoutException e) when (retryCount++ < 3) { WriteLine("Operation timed out. Trying again"); Task.Delay(1000 * retryCount); } } 만약 catch 문에서 조건을 걸었을 경우, try 구문에서 있었던 정보들이 사라지거나 클로.. 2023. 6. 12.
[Effective C#] Item48 강력한 예외 보증을 준수하는 것이 좋다. 1. 예외에 대한 보증 3가지 1) 기본 보증(basic guarantee) 특정 함수 내에서 발생한 예외가 이 함수를 빠져나오더라도 어떤 리소스도 누수되지 않으며, 모든 객체의 상태가 유효한 상태를 유지함을 의미 .NET CLR은 기본 보증을 준수한다. 2) 강력한 보증(sttong guarantee) 기본 보증에 더하여 예외 발생 시에도 프로그램의 상태가 변겨오디지 않음을 추가로 보증함 LINQ 쿼리를 사용하면 기본적으로 강력한 예외 보증 요건을 준수하게 된다. 함수형 프로그래밍 스타일을 사용할 수 없는 경우 방어적인 프로그램을 위해 기존 데이터의 복사본을 유지하고 작업이 완료된 후 값을 교환하는 방법을 사용하면 된다. (이러한 지침은 변경 불가능한 데이터 구조를 사용한느 것이 좋다) 3) 예외 없음.. 2023. 6. 12.
[Effective C#] Item 43 쿼리 결과의 의미를 명확히 강제하고, Single()과 First()를 사용하라. Single() / SingleOrDefault() Single() 두가지 오버로드된 버전이 존재한다 [list.Single, list.Single(Fnc predicate)] 첫번째 Single()은 단순히 데이터 집합에서 유일한 단일 요소를 반환한다. 두번째 Single()은 Func 대리자를 인자로 가지며 데이터 집합에서 특정 조건을 가지는 요소가 유일한 경우 해당 요소를 반환하다. 하지만 데이터집합에 어떠한 값도 없거나 둘이상의 값이 존재하거나 특정 조건을 가지는 요소가 둘이상일때 에러가 발생한다. SingleOrDefault() 해당 메서드는 Single을 사용했을때 발생하는 에러를 보안하여 Default 값을 반환한다. Single과 동일하게 두가지 오버로드된 버전이 존재한다. First() .. 2023. 5. 11.
반응형