Для начала рассмотрим динамический тип, чтобы определить, был ли он динамическим типом. - PullRequest
3 голосов
/ 21 мая 2010

Есть ли способ определить, был ли тип, которому был присвоен объект, динамическим типом?

Например:

dynamic foo = GetCat();

Console.WriteLine( (foo is Cat).ToString() ); // will print True because
// at the execution time, foo will have assumed the Cat type. However, is
// there a mechanism by which I can reflect on foo and say, "This guy was assigned
// a dynamic type, to begin with."?

1 Ответ

3 голосов
/ 21 мая 2010

Есть ли способ определить, был ли тип, которому был присвоен объект, динамическим типом?

Нет, если foo является локальной переменной.

«dynamic» - это функция времени компиляции. Это просто подсказка компилятору, которая означает «не пытайтесь выполнять анализ типов во время компиляции этого выражения; вместо этого генерируйте код, который вызывает специальную версию компилятора во время выполнения».

Во время выполнения локальная переменная foo является просто локальной переменной типа object, а содержимое локальной переменной является ссылкой на Cat. Тот факт, что компилятор знал, что автор кода хотел избежать анализа типов для foo во время компиляции, был утерян.

С помощью можно выяснить, действительно ли метод, возвращающий объект, возвращает динамический, изучив сгенерированные компилятором атрибуты метода, используя отражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...