1.Expression-bodied member
간단한 프로퍼티나 메서드들을 대체하는 형식이다.
자주 사용하는 문법이었고 그저 람다식의 일종으로 알고 있었는데 이름이 따로 있었다니..
//메서드 대체 예시
public void MethodA()
{
Console.WriteLine("AAA");
}
public void BodyA => Console.WriteLine("AAA");
//프로퍼티 대체 예시
public string GetA { get { return "A"; }}
public string BodyGetA => "A"
2.catch/finally 블럭에서 await 사용
IDbConnection conn;
try
{
//...
var response = await req.GetResponseAsync();
//...
}
catch (Exception ex)
{
//에러를 비동기로 로깅
await Log("Error");
}
finally
{
//Close를 비동기로 처리
await Close(conn);
}
원래는 안됐었나보다. 에러를 비동기로 처리가능하다는 것을 알아두면 좋을듯하다.
3.nameof 연산자
void Method_1()
{
Log(nameof(Method_1));
}
를 하면 메서드의 이름을 가져올 수 있다고 한다.
4.딕셔너리 초기화
//기존
var ID = new Dictionary<string, string>()
{
{ "kim", "20190623" },
{ "lee", "20200511" }
};
// C# 6.0 표현
var scores = new Dictionary<string, string>()
{
["kim"] = "20190623",
["lee"] = "20200511"
};
로 표현이 가능하다고 한다. 그렇게 큰 차이가 없는것 같지만 가독성 면에서 더 나아진듯하다.
5.Null 연산자
//1번
int? cnt = rows?.Count;
//2번
Monster c = monsterArray?[0];
1번은 int? 형식이라 값 형식이지만 null을 가질 수 있다.
만약 row가 null이라면 null을 반환하고 .Count까지 접근하지 않아서 에러를 막아준다.
원래대로라면
if(rows != null)
cnt = rows.Count;
를 확 줄여주는 기능이다.
굉장히 유용한 기능인 것 같다.
지금까지 if문으로 null처리를 했었는데 이런 기능이 있는지 이제야 알다니,, 지금까지 너무 c#에 관심이 없었다는 것을 새삼 느끼게 해주는 기능이다.
'프로그래밍 언어 > c#' 카테고리의 다른 글
C# 7.0 패턴 매칭 (2) | 2023.04.29 |
---|---|
c# yield, nullable, 전처리기, 인덱서, Anonymous, Extension,partial, dynamic (0) | 2023.04.28 |
C# abstract class, Interface (0) | 2023.04.24 |
c# Reflection, Attribute (0) | 2023.04.23 |
c# 유니티에서 코루틴(Coroutine)이란 ? (0) | 2023.04.23 |