Saya menemukan berikut ini dan saya bertanya-tanya mengapa itu tidak menimbulkan kesalahan sintaksis.
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
}
}
};
Perhatikan bahwa "," tidak ada di antara "MyA", dan "OtherAs".
Di sinilah kebingungan terjadi:
- Kode mengkompilasi.
- Kamus terakhir "dict" hanya berisi tiga elemen: "Id", "Tribes", dan "MyA".
- Nilai untuk semua kecuali "MyA" benar,
- "MyA" mengambil nilai yang dinyatakan untuk "OtherAs", sementara nilai aslinya diabaikan.
Mengapa ini tidak ilegal? Apakah ini berdasarkan desain?
<string, string> and modify Points to
"88" `Anda kemudian mendapatkan kesalahan kompiler" Tidak dapat secara implisit mengonversi tipe 'System.Collections.Generic.List <System.Collections.Generic.Dictionary <string, object >>' to 'string' " yang sebenarnya membantu saya mengetahui jawabannya!
var test = new Dictionary<string, object> { ["Name"] = "Solo", ["Points"] = 88 }["OtherAs"] = new List<Dictionary<string, object>> { new Dictionary<string, object> { ["Points"] = 1999 } };
akan jelaskan lebih lanjut.
OtherAs
akan ditambahkan sebagai kunci ke dalam apa yang akan menjadi yangMyA
kamus. (Nama = Solo, Poin = 88 plus OtherAs = Daftar <Kamus <string, objek >>) kecuali kemudian tidak pernah menetapkannya . Alih-alih itu menempatkan daftar dicts, sekarang hanya berisi entri Points = 1999 tunggal ke dalamMyA
slot yang menimpa apa yang dipikirkan orang di sana.