我偶然发现以下内容,并且想知道为什么它没有引发语法错误。
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的键添加的。(Name = Solo,Points = 88 plus OtherAs = List <Dictionary <string,object >>),但是它永远不会分配它。取而代之的是,它放置字典列表,现在仅在插槽中包含单个Points = 1999条目,从而覆盖了该位置所认为的内容。MyAMyA