Cast-Objekt mit einer Type-Variablen

Cast-Objekt mit einer Type-Variablen

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 ist
if(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.

schließen