Приведите динамическую переменную к данному типу - PullRequest
3 голосов
/ 09 февраля 2011

У меня есть динамическая переменная, в которой я храню, в зависимости от контекста, объект, который может быть нескольких типов (здесь Foo и Bar )

dynamic myvar;
myvar = new Foo();
//or
myvar = new Bar();

Foo and Bar содержит разные методы.Чтобы получить доступ к методам myvar, я подумал, что можно использовать приведение типа

(Foo)myvar.mymethodoffoo();
(Bar)myvar.mymethodofbar();

Но это не работает, я получаю (динамическое выражение), эта операция будет решена во время выполнения в редакторе кода.

Итак, как я могу привести динамический объект для получения доступных методов и свойств из редактора?

Спасибо заранее.

Ответы [ 2 ]

10 голосов
/ 09 февраля 2011

Операция приведения ((SomeType)x) имеет более низкий приоритет , чем ..
Поэтому ваш код анализируется как (Bar)(myvar.mymethodofbar()) - приведение происходит после вызова метода.

Вам необходимо добавить скобки:

((Bar)myvar).mymethodofbar();
2 голосов
/ 09 февраля 2011
((Foo)myvar).mymethodoffoo();
((Bar)myvar).mymethodofbar();
...