Что-то меня застало врасплох при изучении динамики С# сегодня (я их никогда не использовал, но в последнее время я экспериментировал с веб-картой Nancy). Я обнаружил, что не могу этого сделать:
dynamic expando = new ExpandoObject();
expando.name = "John";
Console.WriteLine(expando["name"]);
Последняя строка генерирует исключение:
Невозможно применить индексирование с [] к выражению типа 'System.Dynamic.ExpandoObject'
Я понимаю сообщение об ошибке, но я не понимаю, почему это происходит. Я просмотрел документацию для ExpandoObject и явно реализует IDictionary<,>
и, следовательно, имеет метод this.[index]
(MSDN). Почему я не могу назвать это?
Конечно, мне нечего мешать спускать ExpandoObject
на словарь вручную, а затем индексировать в него, но это не соответствует точке; он также не объясняет, как Expando смог скрыть метод одного из своих интерфейсов.
Что здесь происходит?