Tôi đã vấp phải những điều sau đây và tôi tự hỏi tại sao nó không gây ra lỗi cú pháp.
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
}
}
};
Lưu ý rằng "," bị thiếu giữa "MyA" và "OtherAs".
Đây là nơi xảy ra sự nhầm lẫn:
- Mã biên dịch.
- Từ điển cuối cùng "dict" chỉ chứa ba yếu tố: "Id", "Tribes" và "MyA".
- Giá trị cho tất cả ngoại trừ "MyA" là chính xác,
- "MyA" lấy giá trị khai báo cho "OtherAs", trong khi giá trị ban đầu của nó bị bỏ qua.
Tại sao điều này không bất hợp pháp? Đây có phải là do thiết kế?
<string, string> and modify Points to
"88" `thì bạn sẽ gặp lỗi trình biên dịch" Không thể chuyển đổi hoàn toàn loại 'System.Collections.Generic.List <System.Collections.Generic.Dixi <chuỗi, object >>' thành 'chuỗi' " mà thực sự đã giúp tôi tìm ra câu trả lời!
var test = new Dictionary<string, object> { ["Name"] = "Solo", ["Points"] = 88 }["OtherAs"] = new List<Dictionary<string, object>> { new Dictionary<string, object> { ["Points"] = 1999 } };
sẽ giải thích thêm.
OtherAs
được thêm vào như là một chìa khóa vào những gì sẽ là cácMyA
từ điển. (Tên = Solo, Điểm = 88 cộng với OtherAs = Danh sách <Từ điển <chuỗi, đối tượng >>) ngoại trừ sau đó không bao giờ gán nó . Thay vào đó, nó đặt danh sách các ký tự, bây giờ chỉ chứa mục Điểm duy nhất = 1999 vàoMyA
vị trí ghi đè lên những gì người ta nghĩ sẽ thuộc về nó.