C#
최신 C# 기능
C# 11
C# 11 새기능
C# 11: Raw String Literal
C# 11: 문자열 내삽 복수라인
C# 11: u8 접미어
C# 11: Generic Math 지원
C# 11: Generic Attribute
C# 11: 리스트 패턴
C# 11: 파일 로컬 타입
C# 11: required modifier
C# 11: Auto-default struct
C# 11: ReadOnlySpan 패턴 매칭
C# 11: 확장된 nameof 범위
C# 11: nint, nuint
C# 11: ref 필드
C# 11: 소문자 타입명 경고
C# 11: 향상된 method group 변환
C# 10
VS 2022 설치
C# 10 global using
C# 10 File-scoped Namespace
C# 10 향상된 문자열 내삽
C# 10 향상된 람다식 유추
C# 10 struct 기능 향상
C# 10 record struct
C# 10 확장된 속성패턴
C# 10 향상된 명료한 할당
C# 10 Destructor 기능 개선
C# 9.0
C# 9 레코드 타입
C# 9 init accessor
C# 9 최상위 프로그램
C# 9 향상된 패턴 매칭
C# 9 향상된 Target Typing
C# 9 공변 리턴 타입
C# 9 Native Int 타입
C# 8.0
C# 8 디폴트 인터페이스 멤버
C# 8 패턴 매칭
C# 8 Nullable Reference Type
C# 8 인덱싱과 슬라이싱
C# 8 비동기 스트림
C# 8 using 선언
C# 8 널 병합 할당자
C# 8 구조체 읽기 전용 멤버
C# 8 기타 기능들
C# 7.0
C# 7.0 새기능
C# 7.0 패턴 매칭
C# 7.0 튜플
C# 7.0 로컬 함수
C# 7.0 out 파라미터
C# 7.0 리터럴 표현
C# 7.0 Deconstructor
C# 7.0 ref return
C# 7.0 async 리턴타입
C# 7.0 Expression-bodied
C# 7.0 throw expression
C# 6.0
C# 6.0 새기능
C# 6.0 널 조건 연산자
C# 6.0 문자열 내삽
C# 6.0 Dictionary초기자
C# 6.0 nameof 연산자
C# 6.0 using static문
C# 6.0 catch블럭 await
C# 6.0 Exception 필터
C# 6.0 자동 속성 초기자
C# 6.0 읽기전용 자동 속성
C# 6.0 Expression-bodied

C#으로 이해하는 자료구조
C# 프로그래밍 기초 실습 전자책
catch/finally 블럭에서 await 사용

C# 5.0에서 await 기능을 도입할 때, catch 나 finally 블럭에서 await를 사용하는 기능을 지원하지 않았다. 이 때문에 개발자들은 여러 Workaround를 사용했어야 했었는데, 이제 C# 6.0 에서는 이를 기본적으로 지원하게 되었다. catch 블럭에서 일반적으로 에러를 로깅을 하는 경우가 많은데, 이 때 로깅처리를 비동기적으로 하기 위해 await를 사용할 수 있다.

예제

IDbConnection conn;
try
{
    //...
    var response = await req.GetResponseAsync();
    //...
}
catch (Exception ex)
{
    //에러를 비동기로 로깅
    await Log(ex);
}            
finally
{
    //Close를 비동기로 처리
    await Close(conn);
}




Exception Filter 지원

VB.NET 이나 F# 에서는 이미 지원되고 있었지만, C#에는 지금까지 지원되지 않았던 것으로 Exception Filter라는 것이 있다. Exception Filter란 catch 시 특정한 조건으로만 다시 필터링하는 하여 catch하는 것으로, C# 6.0 문법에서는 catch() 문 뒤에 추가적인 when 조건문을 사용하게 된다.
예를 들어 아래 예제처럼, Win32Exception 에러가 발생했을 때, 이 Exception 객체의 내부 속성인 NativeErrorCode을 추가적으로 조사해서 그 값이 0x10 인 경우에만 catch 블럭이 실행하도록 하는 기능이다.


예제

// Exception Filter
try
{
    //...
}
catch(Win32Exception ex) when (ex.NativeErrorCode == 0x10)
{
    Log(ex);
}



본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.




Comment spowner@*** 6/22/2015 4:09:53 AM
Comment admin@*** 8/25/2015 2:46:12 PM