Если объект возвращается может быть один из многих типов, то вы лучше, чтобы продолжать использовать его в качестве dynamic
и только пытаюсь доступ к методам и свойствам вы знаете будут существовать (я бы ожидайте, что у COM-метода будет некоторое указание на то, как использовать динамический результат).
var canBeLiterallyAnything = ComMethod();
canbeLiterallyAnything.MethodDocsSayExists();
var propVal = canBeLiterallyAnything.SomeProperty;
Конечно, если все возможные типы реализуют один и тот же интерфейс, вы можете использовать этот интерфейс.
var typeSafeReference = (ISharedInterface)canBeLiterallyAnything;
Если вы знаете, что метод COM возвращает конкретный тип, но просто не знаете, что тип является то для целей исследования можно назвать GetType() и либо записать его на консоль или установить контрольную точку и осмотрите его. Это позволит вам затем обновить свой код, включив в него этот тип (который минимизирует влияние использования dynamic
, но также может ввести риск плохого приведения, если могут быть возвращены другие типы).
var type = canBeLiterallyAnything.GetType();
// e.g. If the above returns a Type of 'SpecificType', then you can update code to
var typeSafeReference = (SpecificType)canBeLiterallyAnything;
Следует отметить, что метод COM не может вернуть конкретный типа, это может быть возвращение анонимного объекта, в этом случае нет никакого литья вы можете сделать, так что вы должны будете продолжать использовать его как dynamic
и только доступ к свойствам/методам, которые, как вы знаете, существуют.
Зачем вам нужно его бросать? Просто сделайте параметр своего метода тем типом, в который вы его обычно набрасывали, и передайте его. Время выполнения будет заботиться обо всем остальном. –
Хороший способ помочь вам открыть тип объекта - использовать ваш отладчик. Поместите точку останова на строку после вызова метода и используйте окно «Часы» для проверки возвращаемого объекта. –
Положив это другим способом, притворись, что ссылка «dynamic» у вас уже есть того типа, в котором вы нуждаетесь, и напишите свой код соответствующим образом. Было бы легче продемонстрировать, что я имею в виду, если вы показали нам какой-то код. –