newObjectType
ist eine Instanz des Type
Klasse (die Metadaten über den Typ enthält), nicht der Typ selbst.
Das sollte funktionieren
var newObject = givenObject as MyClass;
ODER
var newObject = (MyClass) givenObject;
Das Casting in eine Instanz eines Typs macht seit der Kompilierzeit wirklich keinen Sinn muss wissen, was der Variablentyp sein soll, während die Instanz eines Typs eine Laufzeit ist Konzept.
Der einzige Weg var
funktionieren kann, ist, dass der Typ der Variablen zur Kompilierzeit bekannt ist.
AKTUALISIEREN
Casting ist im Allgemeinen ein Konzept zur Kompilierungszeit, d. h. Sie müssen den Typ zur Kompilierungszeit kennen.
Type Conversion ist ein Laufzeitkonzept.
AKTUALISIERUNG 2
Wenn Sie einen Aufruf mit einer Variablen des Typs machen müssen und den Typ zur Kompilierzeit nicht kennen, können Sie Reflektion verwenden :Verwenden Sie Invoke
Methode des MethodInfo
auf der Typinstanz.
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();
Mit IsAssignableFrom
können Sie überprüfen, ob der Typ vorhanden istif(givenObject.GetType().IsAssignableFrom(newObjectType))
Aber Sie können var hier nicht verwenden, da der Typ zur Kompilierzeit nicht bekannt ist.
Ich hatte kürzlich den Fall, dass ich generieren musste ein Code wie in Tomislavs Antwort. Leider war der Typ T während der Generationszeit unbekannt. Es war jedoch eine Variable bekannt, die eine Instanz dieses Typs enthielt. Eine Lösung Dirty Hack/Workaround für dieses Problem wäre:
public void CastToMyType<T>(T hackToInferNeededType, object givenObject) where T : class
{
var newObject = givenObject as T;
}
Diese kann dann mit CastToMyType(instanceOfNeededType, givenObject)
aufgerufen werden und lass den Compiler auf T.