Лучший способ, которым я видел динамическое приведение типов таким образом, - это создание универсального типа, подобного
public static class ReflectionHelper{
public T CastTo<T>(object obj)
{
return (T) obj;
}
}
А затем во время выполнения создайте универсальный метод для приведения к моему конкретному типу.
var value = Activator.CreateInstance(ChosenType());
typeof(ReflectionHelper)
.GetMethod("CastTo")
.MakeGenericMethod(new []{value.GetType()})
.Invoke(null, value);
В invoke мы вызываем null, потому что это статический метод, если бы это был метод экземпляра, нам нужен экземпляр объекта типа Reflection Helper.
Однако я хочупредупреждаю, что эти вещи, как правило, являются запахом кода, и я призываю вас использовать рефлексию только в качестве крайней меры, а не в качестве первого шага к