c# 연산자 질문 드립니다..
조회수 637회
안녕하세요. 현재 vs2013 이용자 입니다..
오픈 소스 분석 중에
public int NumColumns => Bounds?.NumColumns ?? 0;
형태로 선언하는 부분을 발견하였는데, 아무래도 vs2015이상 부터 지원하는 부분 같아서 헷갈리네요 ㅠㅠ
개별적으로 어떤 것을 의미하는지는 알고 있는데 어떤 연산자부터 적용이 되어야 하고 형태를 갖추는지 잘 모르겠습니다..
vs2013(.net 6.0)에서는 어떻게 사용할 수 있을까요?
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
과거로 돌아갑시다.
문법 역행
1.
=>
=>
를 빼봅시다.public int NumColumns => Bounds?.NumColumns ?? 0;
↓
public int NumColumns { get { return Bounds?.NumColumns ?? 0; } }
=>
는 익명함수(람다라고 합니다) 에도 쓰이지만, 프로퍼티가 getter만 있을 때도 줄여서 저렇게 쓸 수 있습니다.2.
?.
다음에는
?.
을 빼볼까요.?.
연산자는null
이 아닐 때에만 멤버에 접근하고, null이면 null을 반환합니다.↓
public int NumColumns { get { var result; // 이러면 안 됩니다. 편의상 var를 썼어요 if (Bounds == null) { result = null; } else { result = Bounds.NumColumns ?? 0; } return result; } }
3.
??
null coercion 이라고 합니다. 왼쪽이 null이면 오른쪽 값을 씁니다. 빼봅시다.
↓
public int NumColumns { get { var result; // 이러면 안 됩니다. 편의상 var를 썼어요 if (Bounds == null) { result = null; } else { if (Bounds.NumColumns != null) { result = Bounds.NumColumns; } else { result = 0; } } return result; } }
닷넷 버전, C# 버전
C# 버전과 닷넷 버전은 별개입니다.
닷넷 버전이 높으면 더 많은 닷넷 API를 쓸 수 있고, C# 버전이 높으면 더 많은 문법적 기능을 쓸 수 있습니다.
Visual Studio 2015를 쓰면서 닷넷 2.0 을 대상으로 프로젝트를 만들수도 있다는 얘기입니다. 이 경우 상위 버전 C#의 문법 중 닷넷 상위 버전을 요구하지 않는 이런 기능들을 사용할 수 있습니다. 아마 VS 2015 가 C# 6 이던가요? 헷갈리네요
닷넷 프레임워크 6.0 이 아직 안 나왔으니 적어주신 버전은 C# 버전인 것 같네요.
즉, VS 2013에서는 C# 6.0 문법을 못 쓰지만 프로젝트 수정 없이 VS 2015에서 개발하면 이러한 문법들을 쓰실 수 있습니다.
- 감사합니다!! 알 수 없는 사용자 2019.4.17 10:40
- 살짝 궁금한 것이 있습니다 ㅠㅠ. Bounds 가 int 형이 아니라면 null 값과 비교할 수 없을 것 같은데. 이 경우에는 어떻게 해야 할까요? 알 수 없는 사용자 2019.4.17 11:20
- Bounds 가 int 형이라면 null과 비교할 수 없습니다. 그런 경우에는 Nullable 타입으로 선언하시면 null과 비교할 수 있습니다. "int? Bounds;" 여기에서 ?는 질문하셨던 문법들과 비슷한 종류의 문법인데 C# 버전은 모르겠습니다. Ch. 2019.4.18 10:37
-
공식 사이트 레퍼런스를 참고하시면 바로 나와요.
=>는 아시다시피 람다 표현식이며, ?? 는 Null 병합연산자라고 불립니다. Bounds.NumColumns가 Null이 아니라면 NumColums는Bounds.NumColumns이고, Null이라면 0이라는 뜻입니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력