Если вы используете .NET 4, это действительно просто = D
dynamic obj = bar;
obj.FooProperty.FooHasAMethod();
Однако, если вы просто хотите привести результат к другому типу, вы можете сделать это во время выполнения с помощьюМетод Convert.ChangeType:
object someBoxedType = new Foo();
Bar myDesiredType = Convert.ChangeType(typeof(Bar), someBoxedType) as Bar;
Теперь у этого есть сильная связь с фактическими типами Foo и Bar.Тем не менее, вы можете обобщить метод, чтобы получить то, что вы хотите:
public T GetObjectAs<T>(object source, T destinationType)
where T: class
{
return Convert.ChangeType(typeof(T), source) as T;
}
Затем вы можете вызывать так:
Bar x = GetObjectAs(someBoxedType, new Bar());
SomeTypeYouWant x = GetObjectAs(someBoxedType, Activator.CreateInstance(typeof("SomeTypeYouWant")));
Используя активатор, вы можете во время выполнения создать любой типты хочешь.И универсальный метод обманом выводит на попытку преобразования из вашего boxedType в тип времени выполнения.
Кроме того, если вы хотите просто вызвать метод для некоторого значения динамического свойства, то лучшим способом (imo) будет просто привести его к какому-либо желаемому объекту.
ISomething propValue = obj.GetProperty("FooPropery").GetValue(obj, null) as ISomething;
if(propValue != null)
propValue.FooHasAMethod();