So erstellen Sie eine Instanz von Werttypen mithilfe der Reflektion

8

Ich möchte eine Instanz von Werttypen wie System.String , System.Boolean , System.Int32 usw. erstellen. Ich erhalte qualifizierte Namen von Typen wie System.String oder MyNamespace.Employee und ich muss eine Instanz erstellen und zurückgeben. Ich verwende Activator.CreateInstance und FormatterServices.GetUninitializedObject , um Instanzen zu erstellen. Bei Werttypen schlägt es jedoch fehl. Ich kann die Logik bei Werttypen nicht hart codieren. Ich brauche eine generische Möglichkeit, Instanzen von Werttypen und Referenztypen zu erstellen.

    
Hemanshu Bhojak 04.01.2010, 06:28
quelle

4 Antworten

11

Was genau versuchen Sie zu tun? FormatterServices.GetUninitializedObject wird hauptsächlich von Serialisierungscode verwendet; Davon sollte man nicht wirklich Gebrauch machen. Es klingt , als ob Sie nur etwas wie TypeConverter benötigen, d. H. (Für diese Typen)

%Vor%     
Marc Gravell 04.01.2010, 06:33
quelle
3

Was genau scheitert? Ich habe den folgenden Code ausprobiert, um festzustellen, ob ein Problem mit Werttypen vorliegt:

%Vor%

Es gibt mir eine Int32-Instanz auf 0 gesetzt.

Wo genau schlägt Ihr Code fehl? Ansonsten würde ich sagen, das Problem liegt in der Art, wie Sie den Typ laden, nicht in der Art, wie Sie die Instanz erstellen.

    
Jaco Pretorius 04.01.2010 06:34
quelle
1

Stellen Sie bei BCL-Werttypen (und bei Verwendung von Strings zum Beschreiben von Typen) sicher, dass Sie keine C # -Schlüsselwörter verwenden und sicherstellen, dass der Typ vollständig mit dem Namespace qualifiziert ist. Beispielsweise wird C # int erfolgreich mit Activator.CreateInstance (..)

erstellt %Vor%

Sie erhalten fehlgeschlagene Versuche, wenn Sie versuchen, sprachspezifische Aliase wie "int" oder kurze Formulare wie "Int32" zu verwenden.

    
John K 04.01.2010 06:35
quelle
0

Das funktioniert für mich:

%Vor%     
ProfK 04.01.2010 06:35
quelle

Tags und Links