В динамическом выражении dynamic x
есть ли причина/объяснение
почему окружающее выражение (например, foo(x)
) также становится динамическим?
Рассмотрим:
static string foo(object x) { }
static void Main()
{
dynamic x = null;
foo(x); // foo(x) is a dynamic expression
}
Я предполагал, что компилятор может разрешить (во время компиляции), что foo(object)
должен быть вызван. Однако, зависание с помощью мыши над foo(x)
показывает, что тип является динамическим.
Я могу помочь компилятору с выводом, указав:
foo((object)x);
но я думал, что тип выражения dynamic
равен object
.
Ссылка на С# говорит, что "операции, содержащие выражения типа dynamic, не разрешены", мой вопрос:
Есть ли причины, которые мешают компилятору разрешить тип "внешнего" /окружающего выражения?
Ссылка
Тип динамический ведет себя как объект типа в большинстве случаев. Однако операции, содержащие выражения типа dynamic, не разрешаются или проверяются типом компилятором. Компилятор объединяет информацию об операции, и эта информация позже используется для оценки операции во время выполнения. В рамках процесса переменные типа dynamic скомпилируются в переменные типа объекта. Поэтому тип dynamic существует только во время компиляции, а не во время выполнения.