Điều gì đó khiến tôi ngạc nhiên khi nhìn vào động lực C# hôm nay (tôi chưa bao giờ sử dụng chúng nhiều, nhưng gần đây tôi đã thử nghiệm với khung web Nancy). Tôi thấy rằng tôi không thể làm điều này:Tại sao tôi không thể lập chỉ mục vào ExpandoObject?
dynamic expando = new ExpandoObject();
expando.name = "John";
Console.WriteLine(expando["name"]);
Dòng cuối cùng ném một ngoại lệ:
Không thể áp dụng lập chỉ mục với [] để một biểu hiện của loại 'System.Dynamic.ExpandoObject'
Tôi hiểu thông báo lỗi, nhưng tôi không hiểu tại sao điều này xảy ra. Tôi đã xem tài liệu cho ExpandoObject và nó thực hiện một cách rõ ràng IDictionary<,>
và do đó có phương thức this.[index]
(MSDN). Tại sao tôi không thể gọi nó?
Tất nhiên, không có gì ngăn tôi từ chối chuyển từ ExpandoObject
sang từ điển theo cách thủ công và sau đó lập chỉ mục vào từ điển, nhưng loại đó không tuân theo điểm; nó cũng không giải thích cách Expando có thể ẩn phương thức của một trong các giao diện của nó.
Điều gì đang xảy ra ở đây?
triển khai giao diện rõ ràng chỉ có thể được truy cập nếu đối tượng được đúc vào giao diện đó, nó không phải là một cái gì đó đặc biệt để ExpanoObject. –
mã nguồn liên quan: http://referencesource.microsoft.com/#System.Core/Microsoft/Scripting/Actions/ExpandoObject.cs,552 –