Fehler bei Umwandlung in Decimal

25/10/2007 - 17:52 von Volker Strähle | Report spam
Tag zusammen,

ich habe folgendene Funktion:

Function checknulldecimal(ByVal s As Object, ByVal returnvalue As Decimal)
As Decimal

If s Is Nothing Or IsDBNull(s) Or s = "" Then

Return returnvalue

Else

Return System.Convert.ToDecimal(s)

End If

End Function


Es werden beim Aufruf übergeben:
s = 1D also als decimal
returnvalue = 1

jetzt kommt folgender Fehler:
"Ungültige Konvertrierung von der Zeichenfolge '' in Typ 'Double'
Die Eingabezeichenfolge hat das falsche Format"

Wieso zeichenfolge und warum double?

Der Fehler tritt in der if-Zeile auf.


Volker
 

Lesen sie die antworten

#1 Armin Zingler
25/10/2007 - 18:28 | Warnen spam
"Volker Stràhle" schrieb
Tag zusammen,

ich habe folgendene Funktion:

Function checknulldecimal(ByVal s As Object, ByVal returnvalue As
Decimal) As Decimal

If s Is Nothing Or IsDBNull(s) Or s = "" Then

Return returnvalue

Else

Return System.Convert.ToDecimal(s)

End If

End Function


Es werden beim Aufruf übergeben:
s = 1D also als decimal
returnvalue = 1

jetzt kommt folgender Fehler:
"Ungültige Konvertrierung von der Zeichenfolge '' in Typ 'Double'
Die Eingabezeichenfolge hat das falsche Format"

Wieso zeichenfolge und warum double?

Der Fehler tritt in der if-Zeile auf.



Option Strict einschalten, Kompilierfehler beheben, dann weiterschaun. Der
Vergleich des Typs Object mit dem Typ String ist unzulàssig. Was wàre, wenn
das Objekt ein Formular ist? OrElse-Operator ist auch empfehlenswert. Der
Or-Operator wertet immer beide Operanden aus und verknüpft sie miteinander.

Shared Function checknulldecimal( _
ByVal s As Object, ByVal returnvalue As Decimal) As Decimal

If s Is Nothing OrElse _
s Is DBNull.Value OrElse _
(TypeOf s Is String AndAlso s.ToString.Length = 0) Then

Return returnvalue
Else
Return System.Convert.ToDecimal(s)
End If

End Function

Warum System.Convert? Welche Typen sollen denn für s erlaubt sein?

Interessehalber gefragt: Gibt es einen Grund, warum Nothing, DBNull und ""
identisch behandelt werden sollen?

"Double" deswegen, da bei impliziter Typkonvertierung (wegen Option Strict
Off) der String in eine Zahl vom Typ Double umgewandelt wird um einen
Vergleich mit einem numerischen Operanden, in diesem Falle 1D, zu
ermöglichen. Auch wegen solcher "Überraschungen" sollte Option Strict immer
On sein.


Armin

Ähnliche fragen