objeto de lanzamiento con una variable de tipo

Lo siguiente no funciona, por supuesto. ¿Hay alguna manera posible, que es bastante similar como esta?

Type newObjectType = typeof(MyClass); var newObject = givenObject as newObjectType; 

newObjectType es una instancia de la clase Type (que contiene metadatos sobre el tipo), no el tipo en sí.

Esto debería funcionar

 var newObject = givenObject as MyClass; 

O

 var newObject = (MyClass) givenObject; 

Casting a una instancia de un tipo realmente no tiene sentido ya que el tiempo de comstackción debe saber cuál debe ser el tipo de variable, mientras que la instancia de un tipo es un concepto de tiempo de ejecución .

La única forma en que var puede funcionar es que el tipo de variable se conoce en tiempo de comstackción.


ACTUALIZAR

Casting generalmente es un concepto en tiempo de comstackción, es decir, debe conocer el tipo en tiempo de comstackción.

Type Conversion es un concepto de tiempo de ejecución.


ACTUALIZACIÓN 2

Si necesita realizar una llamada utilizando una variable del tipo y no conoce el tipo en tiempo de comstackción, puede usar la reflexión : use el método Invoke de MethodInfo en la instancia de tipo.

 object myString = "Ali"; Type type = myString.GetType(); MethodInfo methodInfo = type.GetMethods().Where(m=>m.Name == "ToUpper").First(); object invoked = methodInfo.Invoke(myString, null); Console.WriteLine(invoked); Console.ReadLine(); 

Puede verificar si el tipo está presente con IsAssignableFrom

 if(givenObject.GetType().IsAssignableFrom(newObjectType)) 

Pero no puede usar var aquí porque el tipo no se conoce en tiempo de comstackción.

Recientemente tuve el caso, que necesitaba generar algún código como en la respuesta de Tomislav . Desafortunadamente durante el tiempo de generación, el tipo T era desconocido. Sin embargo, se conocía una variable que contenía una instancia de ese tipo. Una solución sucia / alternativa para ese problema sería:

 public void CastToMyType(T hackToInferNeededType, object givenObject) where T : class { var newObject = givenObject as T; } 

Entonces esto puede ser llamado por CastToMyType(instanceOfNeededType, givenObject) y dejar que el comstackdor deduzca T.

Tal vez puedas resolver esto usando generics.

 public void CastToMyType(object givenObject) where T : class { var newObject = givenObject as T; }