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.
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)
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.
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.
Tags und Links .net c# reflection value-type