이것은 어떻게 C#사전에 초기화 정확합니까?
나는 우연히 다음과 나는'm 왜 그't 기 구문 오류가 있습니다.
var dict=new 사전<string,object> { ["Id"]=입니다.NewGuid(), ["부"]=new List<int>{4,5}, ["MyA"]=new 사전<string,object> { ["이름"]="솔로", ["점"]=88 } ["OtherAs"]=new List<사전<string,object>> { 새 사전<string,object> { ["점"]=1999 } } };
알","는 누락 사"MyA"고,"OtherAs".
이것은 혼란이 일어나:
- 코드를 컴파일.
- 최종 사전"dict"만 포함 세 가지 요소"Id","부"고,"MyA".
- 값을 위해 모든 제외"MyA"올바르
- "MyA"는 가치를 선언"OtherAs"하는 동안,그것의 원래 값은 무시됩니다.
왜't 이 불법? 이에 의해 디자인?
55
2
없는 쉼표로 모든 차이를 만든다. 그것이 원인이 인덱
["OtherAs"]
에 적용 될 이전그래서 근본적으로 너'다시 말하기:
이는 할당을 표현(
x=y
). 여기에는x
은 사전"이름"와"점",색인을 가진"OtherAs"
및y
는목록<사전<string,object>>
. 는 할당을 표현을 평가하는 값이 할당(y
)는 목록의 사전.의 결과는 이 전체적인 표현은 그 다음에 할당된 키"MyA"이유입니다,"MyA"는 목록의 사전.
는지 확인할 수 있습니다 이것은 무엇's 일어나 변경하여 이 유형의 사전
x
:여기에는 코드,포맷하지만 일부는 괄호 안에 추가하는 방법을 보여 컴파일러가 구문 분석된다:
무엇's 여기에서 일어나고 있는 만들고 있는 사전 다음을 인덱싱니다. 의 결과 indexer/지정 표현은 그 반환되는 것은 점점에 할당으로`MyA 사용 슬롯에 있습니다.
이:
분할할 수 있습으로 다음이비-코드:
의 결과에 할당하는 인덱의 두 번째 사전이 반환됩(할당 값을 반환합당/오른쪽)는 사전 임시역는 단"으로 사라지 ether". 의 결과 indexer(의 목록 사전에)어떤 위치 주요 사전 끝에서.
이것은 이상한 사례로 만들어 떨어지기 쉽게 되어 있는 것으로 사용으로 인해의
객체
형식의 사전 값입니다.