Краткий ответ
Вам не нужно ничего импортировать. Просто используйте неявное и явное преобразование C # и ключевое слово «dynamic». Ответ Д. Хёрстера правильный.
Длинный ответ
C # имеет отдельный тип для обработки динамических объектов - тип "динамический". Но в VB для этого нет выделенного типа, поскольку динамическое поведение реализуется посредством позднего связывания. Таким образом, в VB динамические объекты, которые нуждаются в реальном динамическом связывании, иногда трудно отличить от просто «объектов». CType обрабатывает преобразования "объектов" в типы. В большинстве случаев это нормально. Однако, когда вы имеете дело с реализациями интерфейса IDynamicMetaObjectProvider, это может вызвать проблемы. CType не может понять, имеет ли он дело с «объектом» или «динамическим объектом» - нет синтаксиса, позволяющего отличить одно от другого, и CType не хочет вызывать динамические связыватели для всех объектов, определенных посредством позднего связывания. Предполагается, что все объекты, с которыми он имеет дело, являются «объектами», а не «динамическими объектами».
Поэтому вам нужно как-то сообщить компилятору, что вы имеете дело с динамическим объектом. Вместо того, чтобы создавать новый «динамический» тип, команда VB решила просто добавить еще одну функцию преобразования - CTypeDynamic. Он явно сообщает компилятору, что вы преобразуете динамический тип в какой-то другой тип (опять же, в C # это вам не нужно, поскольку вы уже определили объект с помощью ключевого слова dynamic, и компилятор уже знает, с чем он имеет дело).
Хорошей иллюстрацией проблемы является метод DynamicObject.TryConvert . Попробуйте заменить CTypeDynamic на CType в примере VB, и вы увидите исключение. Опять же, это потому, что CType ничего не знает о динамическом связывателе времени выполнения. Но в C # механизм связывания во время выполнения вызывается для всех объектов, определенных ключевым словом dynamic, поэтому ему не нужна эта специальная функция.