Konvertiert von String in einen beliebigen Basistyp

8

Ich habe ein string und ein Type , und ich möchte den string -Wert zurückgeben, der in dieses Type konvertiert wurde.

%Vor%

Dies gibt eine object zurück, die ich in einem Aufruf des Eigenschaftssatzwerts verwenden kann:

%Vor%

Dies funktioniert für die meisten grundlegenden Typen, mit Ausnahme von Nullwerten.

%Vor%

NullableIntTest schlägt in der ersten Zeile mit:

fehl
  

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.

%Vor%     
weston 14.11.2012, 15:08
quelle

6 Antworten

5

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%     
Kirill Bestemyanov 14.11.2012, 15:18
quelle
3
%Vor%     
Joan Caron 14.11.2012 15:15
quelle
2

versuche das:

%Vor%     
hunter 14.11.2012 15:11
quelle
2

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.

%Vor%

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 .

    
Servy 14.11.2012 15:25
quelle
1

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.

%Vor%     
Karel Frajták 14.11.2012 16:24
quelle
0

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 Ссылка .

    
qstebom 14.11.2012 15:17
quelle

Tags und Links