나는 다음을 우연히 발견하고 왜 구문 오류가 발생하지 않았는지 궁금합니다.
var dict = new Dictionary<string, object>
{
["Id"] = Guid.NewGuid(),
["Tribes"] = new List<int> { 4, 5 },
["MyA"] = new Dictionary<string, object>
{
["Name"] = "Solo",
["Points"] = 88
}
["OtherAs"] = new List<Dictionary<string, object>>
{
new Dictionary<string, object>
{
["Points"] = 1999
}
}
};
"MyA"와 "OtherAs"사이에 ","가 없습니다.
혼란이 일어나는 곳입니다.
- 코드가 컴파일됩니다.
- 마지막 사전 "dict"에는 "Id", "Tribes"및 "MyA"의 세 가지 요소 만 포함됩니다.
- "MyA"를 제외한 모든 값이 정확합니다.
- "MyA"는 "OtherAs"에 대해 선언 된 값을 취하지 만 원래 값은 무시됩니다.
왜 이것이 불법이 아닙니까? 의도적으로 설계된 것입니까?
첫 댓글에 붙여 넣기에 링크가 너무 깁니다. 실제로 이상하다. sharplab.io/...
—
pinkfloydx33
예, LinqPad로 테스트했으며 동일한 결과를 얻었습니다. 무슨 일이 일어나고 있는지 잘 모르겠습니다. 일부 C # 전문가가 여기에 약간의 빛을 비출 수 있는지 봅시다.
—
스티브
첫 번째 사전을
—
pinkfloydx33
<string, string> and modify Points to
"88" 로 변경하면 컴파일러 오류 "암시 적으로 'System.Collections.Generic.List <System.Collections.Generic.Dictionary <string, object >>'를 'string'으로 변환 할 수 없습니다"라는 오류가 발생합니다. 실제로 대답을 알아내는 데 도움이되었습니다!
@OlegI 컴파일러 버그라고 생각하지 않습니다. 많은 좋은 설명이 이미 답변에 제공되어 있습니다. 그러나 시도
—
MKR
var test = new Dictionary<string, object> { ["Name"] = "Solo", ["Points"] = 88 }["OtherAs"] = new List<Dictionary<string, object>> { new Dictionary<string, object> { ["Points"] = 1999 } };
하면 더 자세히 설명 할 것입니다.
OtherAs
무엇에 키로 추가됩니다 것MyA
사전. (Name = Solo, Points = 88 plus OtherAs = List <Dictionary <string, object >>) 제외하고 는 할당하지 않습니다 . 대신 dicts 목록을 배치하고MyA
슬롯에 하나의 Points = 1999 항목 만 포함되어 있으므로 dicts 목록을 배치합니다 .