VB.NET: Eingabezeichenfolge hatte nicht korrekten format
Mit dem folgenden snippet
Foo = IIf(String.IsNullOrEmpty(txtFoo.Text), 0, Integer.Parse(txtFoo.Text.Trim))
Bekomme ich die Fehlermeldung, wenn ich behaupte, dass das Feld ohne Wert: "die Eingabezeichenfolge hat das falsche format."
Ich habe keine Leerzeichen oder etwas anderes und String.IsNullOrEmpty(txtFoo.Text) gibt true zurück. Was ist falsch?
Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
IIF bewerten:
unabhängig davon, ob:
wahr ist oder nicht (da es nur eine Funktion mit drei Argumenten übergeben werden, so dass alle Argumente gültig sein muss). Also selbst wenn
txtFoo.text is empty
, es ist immer noch versuchen, zu Analysieren, um eine Ganzzahl in diesem Fall.Wenn Sie mit VS2008, die Sie verwenden können, WENN der Betreiber statt, die Kurzschluss-als Sie erwarten IIF zu tun.
IIf
eigentlich ist eine Funktion, ist es nicht einfach sich Verhalten wie einer.If
ist ein operator, es ist also nicht eine Funktion, und es verhält sich nicht wie ein entweder +1 wennIIf ist eine Funktion aufrufen, anstatt eine echte bedingte operator, und das bedeutet, dass beide Argumente ausgewertet werden müssen. So, es ist nur versucht, um Integer.Parse() wenn Ihr string ist Null/Nichts.
Wenn Sie Visual Studio 2008 oder später, es ist nur ein Zeichen Unterschied, Ihr problem zu lösen:
Diese version des
If
Schlüsselwort ist tatsächlich eine echte bedingte operator ist, der die short-circuit-evaluation der Argumente als erwartet.Wenn Sie Visual Studio 2005 oder früher, können Sie es lösen wie diese:
IIf ist nicht eine echte ternäre operator, es tatsächlich wertet beide parameter Ausdrücken. Sie wollen wahrscheinlich verwenden Sie die If-operator statt (VS 2008+).
Würden Sie einfach sagen
Einen Unterschied zwischen der bedingten und der "else" - Teil ist der Beschnitt der Zeichenfolge. Sie könnten versuchen, trimmen Sie den string vor dem Aufruf
IsNullOrEmpty
.