Ich habe ein string
und ein Type
, und ich möchte den string
-Wert zurückgeben, der in dieses Type
konvertiert wurde.
Dies gibt eine object
zurück, die ich in einem Aufruf des Eigenschaftssatzwerts verwenden kann:
Dies funktioniert für die meisten grundlegenden Typen, mit Ausnahme von Nullwerten.
%Vor% NullableIntTest
schlägt in der ersten Zeile mit:
System.InvalidCastException: Ungültige Umwandlung von 'System.String' in 'System.Nullable'1 [[System.Int32, mscorlib, Version = 4.0.0.0, Culture = Neutral, PublicKeyToken = b77a5c561934e089]]'.
Ich habe Schwierigkeiten festzustellen, ob der Typ Nullwert hat und das Verhalten der Methode StringToType
ändert.
Verhalten, das ich möchte:
Wenn die Zeichenfolge null oder leer ist, geben Sie null zurück, andernfalls konvertieren Sie nach dem nicht nullbaren Typ.
Ergebnis
Wie Kirills Antwort, nur mit einem ChangeType
Aufruf.
Sie können Convert.ChangeType nicht für nullwertfähige Typen verwenden, da sie nicht von IConvertible geerbt werden. Sie sollten Ihre Methode neu schreiben.
%Vor% Das Problem hierbei ist, dass der Rückgabewert von ChangeType
sowie Ihre Methode object
ist. Wenn Sie einen nullfähigen Typ in object
einbetten, wird der Nullwerttyp nicht in die Box eingeschlossen. Wenn der Wert zur Laufzeit tatsächlich Null ist, wird ein null
eingeschlossen, und wenn er einen Wert hat, wird der tatsächlich zugrunde liegende Wert (und nicht die Nullable-Version) eingekachelt.
Dies wird im allgemeinen Fall mit keinem anderen Typ passieren; Nullable<T>
hat spezielle Compiler-Unterstützung, um dies zu tun. Sie müssen natürlich auch den Sonderfall Nullable
in Ihrem Code verwenden. Wenn Ihre Methode einen Nullable
-Typ übergeben hat, müssen Sie zuerst das Objekt auf null
überprüfen, und wenn nicht null
, verwenden Sie stattdessen den zugrunde liegenden Typ von Nullable
.
Der Code mit Hilfe von Kirill Bestemyanov 'Schnipsel:
%Vor% Und Verwendung ( WL
schreibt gerade in die Konsole). Sie hatten Recht, die generische Methode kann int?
nicht als generischen Parameter verwenden.
Sie müssen für jeden Typ, den Sie unterstützen möchten, eine geeignete Umwandlungsmethode verwenden.
%Vor%Es ist unmöglich für den Compiler, den Typ abhängig vom Inhalt der Zeichenfolge herauszufinden. Weitere Informationen zum Konvertieren von String- in Skalartypen finden Sie in den folgenden Links: Ссылка und Ссылка .
Tags und Links c#