динамический не содержит определения для GetType () - PullRequest
0 голосов
/ 23 октября 2019

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

Myкод выглядит примерно так:

dynamic readings;

private void method()
{
    Type type= readings.GetType();
}

Я что-то здесь не так делаю?

Справочник по использованию GetType:

Как проверить тип динамического типа данных вво время выполнения?

1 Ответ

4 голосов
/ 23 октября 2019

просто приведите его к object:

Type type = ((object)readings).GetType();

Быть dynamic означает, что все вызовы могут быть перехвачены, но это трюк с компилятором, а не внутренняя особенность типа. Приведение его к object означает, что компилятор прекращает делать это . За кулисами dynamic - это просто причудливое слово для object в любом случае .

Обратите внимание, однако, что обычно плохая идея смешивать отражение (GetType()) иdynamic;в то время как объекты могут работать как dynamic (повторно отображая API отражения как dynamic), это не всегда так, и многие (большинство?) реализаций dynamic представляются полностью искусственнымичлены, которые не существуют с точки зрения отражения. Это своего рода основной пункт из dynamic, с "о, это также позволяет вам быть ленивым и разговаривать с типами, не зная их типа", просто удобный побочный эффект.

...