![](/img/trans.png)
[英]Vb.net Simple TextBox conversion to integer gives error input string was not in a correct format
[英]VB.NET: Input string was not in a correct format
帶有以下代碼段
Foo = IIf(String.IsNullOrEmpty(txtFoo.Text), 0, Integer.Parse(txtFoo.Text.Trim))
提交不帶值的字段時出現錯誤:“輸入字符串的格式不正確。” 我沒有任何空間或其他東西,並且String.IsNullOrEmpty(txtFoo.Text)返回true。 怎么了? 謝謝。
IIF將評估:
Integer.Parse(txtFoo.Text.Trim)
不管是否:
String.IsNullOrEmpty(txtFoo.Text)
是否為真(因為它只是一個傳遞了三個參數的函數,因此所有參數都必須有效)。 因此,即使txtFoo.text is empty
,在這種情況下,它仍會嘗試將其解析為Integer。
如果使用的是VS2008,則可以改用IF運算符,因為它會導致IIF短路。
IIf是函數調用,而不是真正的條件運算符,這意味着必須對兩個參數都進行求值。 因此,如果您的字符串為Null / Nothing,它只會嘗試調用Integer.Parse()。
如果您使用的是Visual Studio 2008或更高版本,則只能解決一個字符差異:
Foo = If(String.IsNullOrEmpty(txtFoo.Text), 0, Integer.Parse(txtFoo.Text.Trim())
此版本的If
關鍵字實際上是一個真正的條件運算符,它將按預期對參數進行短路評估。
如果您使用的是Visual Studio 2005或更早版本,請按以下步驟修復它:
If String.IsNullOrEmpty(txtFoo.Text) Then Foo = 0 Else Foo = Integer.Parse(txtFoo.Text.Trim())
IIf不是真正的三元運算符,它實際上計算兩個參數表達式。 您可能想改為使用If運算符(VS 2008+)。
你只是說
If(String.IsNullOrEmpty(txtFoo.Text), 0, Integer.Parse(txtFoo.Text.Trim()))
條件部分和“其他”部分之間的區別是字符串的修剪。 您可以在調用IsNullOrEmpty
之前嘗試修剪字符串。
Foo = IIf(String.IsNullOrEmpty(txtFoo.Text.Trim), 0, Integer.Parse(txtFoo.Text.Trim))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.